我已经创建了一个表单,并通过VS Designer(VS 2010)添加了一个listview(lsTest),然后添加了列。对于每个列,我添加了一个列标题和一个Text属性值。例如,第一列名为col1,我要为其显示的文本是“This is Col1”: Column definition
在代码中,我有一个简单的SQL Select语句,用于从SQL Server表中提取数据并加载数据集(dsTest)。然后,我读完数据集并将每个数据集行中的列加载到新的列表视图项中。这个数据加载工作正常(我可以在调试中看到项目被添加到列表视图)。我还将其中一个SQL列放入listview列的标记中,因为它是数据的主键(这就是为什么for循环在Count-2停止,键是最后一列)。这是数据加载:
For iRow = 0 To dsTest.Tables(0).Rows.Count - 1
Dim lvItem As New ListViewItem
lvItem.Tag = dsTest.Tables(0).Rows(iRow)(dsTest.Tables(0).Columns.Count - 1).ToString()
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
lvItem.SubItems.Add(Trim(dsTest.Tables(0).Rows(iRow)(iCol).ToString()))
Next
lstTest.Items.Add(lvItem)
Next
问题是当显示列表视图时,列根本不显示。经过一些研究,我尝试使用SQL字段名称添加列标题。
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
dsTest.Columns.Add(dsShares.Tables(0).Columns(iCol).ColumnName)
Next
现在显示列,但是他们使用SQL字段名称作为标题(我希望这是我在代码中所做的)。但问题是,我不想在标题中使用SQL字段名称;我想使用我在Design中添加的已定义列标题 然后我尝试循环遍历lstTest.Items,并使用Text属性填充列标题。如果我在加载数据之前执行此操作,则For..next循环执行0次。如果我在加载数据后执行此操作,则循环执行正确的次数,但标题为空。
以下是我的尝试和结果:
For iRow = 0 To dsTest.Tables(0).Rows.Count - 2
Dim lvItem As New ListViewItem
lvItem.Tag = dsTest.Tables(0).Rows(iRow)(dsTest.Tables(0).Columns.Count - 1).ToString()
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
lvItem.SubItems.Add(Trim(dsTest.Tables(0).Rows(iRow)(iCol).ToString()))
Next
lstTest.Items.Add(lvItem)
Next
结果:数据加载到lstTest.Items但没有显示
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
lstTest.Columns.Add(dsTest.Tables(0).Columns(iCol).ColumnName)
Next
For iRow = 0 To dsTest.Tables(0).Rows.Count - 2
Dim lvItem As New ListViewItem
lvItem.Tag = dsTest.Tables(0).Rows(iRow)(dsTest.Tables(0).Columns.Count - 1).ToString()
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
lvItem.SubItems.Add(Trim(dsTest.Tables(0).Rows(iRow)(iCol).ToString()))
Next
lstTest.Items.Add(lvItem)
Next
结果:数据显示SQL列名称为标题
For iCol = 0 To lstTest.Items.Count - 2
lstTest.Columns.Add(lstTest.Items(iCol).Text)
Next
For iRow = 0 To dsTest.Tables(0).Rows.Count - 2
Dim lvItem As New ListViewItem
lvItem.Tag = dsTest.Tables(0).Rows(iRow)(dsTest.Tables(0).Columns.Count - 1).ToString()
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
lvItem.SubItems.Add(Trim(dsTest.Tables(0).Rows(iRow)(iCol).ToString()))
Next
lstTest.Items.Add(lvItem)
Next
结果:第一个循环执行0次;数据显示但没有列标题
For iRow = 0 To dsTest.Tables(0).Rows.Count - 2
Dim lvItem As New ListViewItem
lvItem.Tag = dsTest.Tables(0).Rows(iRow)(dsTest.Tables(0).Columns.Count - 1).ToString()
For iCol = 0 To dsTest.Tables(0).Columns.Count - 2
lvItem.SubItems.Add(Trim(dsTest.Tables(0).Rows(iRow)(iCol).ToString()))
Next
lstTest.Items.Add(lvItem)
Next
For iCol = 0 To lstTest.Items.Count - 2
lstTest.Columns.Add(lstTest.Items(iCol).Text)
Next
结果:第二个循环执行正确次数;数据显示但没有列标题
我进行了搜索和搜索,但我能找到的所有示例都会从代码中加载列标题。我找不到任何使用Designer标题的例子。
我在这里缺少什么吗?或者不能VB.net/VS做我想做的事情?
提前感谢您的帮助