将dataitem(从字符串数组)添加到listview

时间:2013-06-25 18:25:35

标签: asp.net vb.net listview webforms

在前言中,我查看了几个包含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呢?

1 个答案:

答案 0 :(得分:0)

我认为你误用了ListViewItem类的DataItem属性。当ListView本身被绑定时,这真的用于获取ListViewItem所代表的底层对象。

由于你的FillListView函数返回一个IEnumerable(Of String),你只需将ListView的DataSource属性设置为函数调用。

absence_lv.Datasource = FillListView(sTypeReason)
absence_lv.Databind()

如您所见,无需手动添加每个项目。