【问题标题】:add dataitem(from string array) to listview将数据项(从字符串数组)添加到列表视图
【发布时间】:2013-06-25 18:25:34
【问题描述】:

作为序言,我浏览了几篇包含列表视图的帖子,但没有什么能与我正在尝试做的事情相提并论。

我正在尝试通过具有多个 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 个 if 语句,其结构与上面的块相似,都包含在 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?

【问题讨论】:

    标签: asp.net vb.net listview webforms


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我最初尝试过这种方式,但我不断收到空引用错误。我想出了另一种方法来使用 GridView 来做这件事,这对于我们正在尝试做的事情来说效果很好。
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多