尝试在VS.NET中使用静态列标题为VB.NET中的Listview

时间:2017-09-29 01:40:19

标签: vb.net visual-studio listview

我已经创建了一个表单,并通过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次。如果我在加载数据后执行此操作,则循环执行正确的次数,但标题为空。

以下是我的尝试和结果:

示例1 - 仅数据加载

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但没有显示

示例2 - 数据加载,来自SQL列的标题

    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列名称为标题

示例3 - 数据加载,数据加载前column.items的标题

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次;数据显示但没有列标题

示例4 - 数据加载,数据加载后column.items的标题

        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做我想做的事情?

提前感谢您的帮助

0 个答案:

没有答案