如何从Listview(到DataTable)中提取/转换信息?

时间:2010-01-04 13:27:43

标签: asp.net vb.net listview

我有一个相对简单的Listview,突然需要(由于新的要求)将它的'layout'提取到DataTable,以便常规例程可以将其转换为Excel电子表格以用于导出。

ItemTemplate只是一系列表行,其中包含一些文本,数据绑定标签和单元格中带有验证器的文本框。

通常,当尝试提取特定值(如输入文本框的内容)时,我使用ListViewItem的.FindControl方法。

For Each objItem As ListViewItem In lvwOptions.Items
    Dim objTextHrsLabor As TextBox = CType(objItem.FindControl("txtHrsOptByLabor"), TextBox)
    decHours = CDec(objTextHrsLabor.Text)
Next

但是,在这种情况下,我正在尝试显示所有显示的数据 - 创建的表的所有“行和列”。

在ListViewItems的ForEach / Next循环中,我为每个实例的控件启动了一个ForEach / Next循环控件,但是我得到了一些非常奇怪的结果(比如控件中有几个表格单元格)。

我明白我的方向是错误的。我想要的只是将格式良好的5行6列表转换为5行6列数据表。

我应该看一下另一条途径吗?

3 个答案:

答案 0 :(得分:0)

我会查看ListView的基础数据源。

数据源必须是集合或IEnumerable,您应该能够遍历它以构建数据表。

如果您知道所有元素都属于同一类型,那么您可以使用第一个元素并使用反射查看其属性,以确定您的表应包含哪些列。然后,您可以将DataRows添加到表中,并使用属性名称填充列。

这可能比迭代生成的ListView的html更快。

答案 1 :(得分:0)

我使用这种方法将ListView导出到Excel:http://aspalliance.com/771_CodeSnip_Exporting_GridView_to_Excel

我知道它处理的是GridView,但是我将它改编为ListView(只要底层结构是一个表),它对我来说很好。

HTH。

答案 2 :(得分:0)

你可以使用..

listView1.Items[0].SubItems[0].Text 

这将非常有用,非常简单易行。您可以在索引和索引的基础上提取信息。无论如何都要用。