在前言中,我查看了几个包含listviews的帖子,并没有真正与我正在尝试做的事情进行比较。
我正在尝试通过一个循环确定值,该循环具有类似于以下内容的几个If语句:
If Convert.ToInt32(GetData(ds.Tables("HRIS").Rows(i), "ABS_CO_RULE_DAYS", DefaultValue)) > 0 Or _
Convert.ToInt32(GetData(ds.Tables("HRIS").Rows(i), "ABS_CO_RULE_HRS", DefaultValue)) > 0 Or _
Convert.ToInt32(GetData(ds.Tables("HRIS").Rows(i), "ABS_CO_RULE_MINS", DefaultValue)) > 0 Then
msChargeDays = GetData(ds.Tables("HRIS").Rows(i), "ABS_CO_RULE_DAYS", DefaultValue)
msChargeHours = GetData(ds.Tables("HRIS").Rows(i), "ABS_CO_RULE_HRS", DefaultValue)
msChargeMins = GetData(ds.Tables("HRIS").Rows(i), "ABS_CO_RULE_MINS", DefaultValue)
msHowPaid = "CR DAYS"
AbsenceLine() 'calls sub
End If
此代码块从其调用的数据集返回有效结果。现在在下面的代码块中,我试图吸收由主代码块确定的值,如果语句在结构上与上面的块类似,则大约为40,所有这些都包含在For循环中。
在下面的代码块中,我试图将ListViewItem类型的对象插入到ListView中。这是我在其后面的注释字符串表示我的错误的地方。填充ListViewItem的函数位于底部,返回的所有变量都是类变量,并将有效值返回给ListViewItem。我通过调试器对此进行了双重检查。
Private Sub AbsenceLine()
Dim sTypeReason As String
If msType = "" Then
sTypeReason = Left(msReason, 25)
Else
sTypeReason = msType & "--" & msReason
End If
Dim item As ListViewItem
item = New ListViewItem(ListViewItemType.DataItem)
item.DataItem = FillListView(sTypeReason)
absence_lv.Items.Add(item) 'this line here is what is givine me issues
End Sub
Private Function FillListView(typeReason As String) As IEnumerable(Of String)
Return {msDate, msVoid, msCont, msDays, msHours, msMinutes, typeReason, msChargeDays, msChargeHours,
msChargeMins, msHowPaid} 'all values returned are of String type
End Function
现在有了背景:
我完全偏离了我想做的事情吗? 有没有更简单的方法来使用gridview呢?
答案 0 :(得分:0)
我认为你误用了ListViewItem类的DataItem属性。当ListView本身被绑定时,这真的用于获取ListViewItem所代表的底层对象。
由于你的FillListView函数返回一个IEnumerable(Of String),你只需将ListView的DataSource属性设置为函数调用。
absence_lv.Datasource = FillListView(sTypeReason)
absence_lv.Databind()
如您所见,无需手动添加每个项目。