我有一个相对简单的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列数据表。
我应该看一下另一条途径吗?
答案 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
这将非常有用,非常简单易行。您可以在索引和索引的基础上提取信息。无论如何都要用。