【问题标题】:VB.net Listview PopulateVB.net 列表视图填充
【发布时间】:2021-03-10 01:44:07
【问题描述】:

我正在尝试用我的访问数据库中的项目填充 VB.net 中的 Listview。

到目前为止,我已经设法用我想要的所有项目填充它,但我需要右列下的项目。 (用户和评论)

以下是所有相关代码:

    Dim count As Integer
    Dim comments As New DataSet
    comments = GetComments(classid)

    With CommentsView
        .View = View.Details
        .Columns.Add("User")
        .Columns.Add("Comment")
    End With

    count = CountRecords() - 1
    For i As Integer = 0 To count
        CommentsView.Items.Add(comments.Tables(0).Rows(i).Item(2))
        CommentsView.Items.Add(comments.Tables(0).Rows(i).Item(3))

    Next

所以基本上我想要用户下的 Item(2) 和 cmets 下的 Item(3)。有什么想法吗?

谢谢。

【问题讨论】:

  • 您正在添加等同于 LV 中的行的项目,您需要将用户和评论添加为子项目(在视觉上等同于列)。
  • 那么我该怎么做呢?

标签: vb.net listview ms-access


【解决方案1】:

您正在添加等同于 LV 中的行的项目,您需要将用户和评论添加为子项目(在视觉上等同于列)。

Dim LVI as ListViewItem
' no need for a count temp var
For i As Integer = 0 To CountRecords() - 1
    LVI = New ListViewItem
    ' whatever you want to show in columns 0
    LVI.Text = (What_Ever_Text_For_Col_0)

    ' add subitem text
    ' this is adding strings from a dataset, but could be any string
    LVI.SubItems.Add(comments.Tables(0).Rows(i).Item(2))    ' maybe .ToString?
    LVI.SubItems.Add(comments.Tables(0).Rows(i).Item(3))

    ' add completed LVI to the LV
    CommentsView.Items.Add(LVI)
Next

【讨论】:

    【解决方案2】:

    我花了一段时间才弄清楚这个逻辑。我将在这里重申它作为进一步的例子。

    Dim count As Integer
    Dim comments As New DataSet
    comments = GetComments(classic)
    

    到目前为止一切顺利。

    With ListView1
      .View = View.Details
      .HeaderStyle = ColumnHeaderStyle.Nonclickable ' set to whatever you need
      .Columns.Clear() ' make sure columnscollection is empty
                
    ' Add 2 columns
        .Columns.Add("User")
        .Columns.Add("Comment)
    End With
    

    也不错。一些小的补充。

    For i As Integer = 0 To CountRecords() - 1
       CommentsView.Items.Add(New ListViewItem({comments.Tables(0).Rows(i).Item(2), comments.Tables(0).Rows(i).Item(3)}))
    Next
    

    这行CommentsView.Items.Add 与字段数组是我认为您正在寻找的技巧。

    我对此的处理方式略有不同。这是一个例子:

    Dim conn As New SQLiteConnection("Data Source=myDatabase.sql3;Version=3;")
    conn.Open()
    ' I 'm using a table in my database called "lang", a list of languages and language codes.
    Dim SQL as string = "Select * from lang;"
    Dim da As New SQLiteDataAdapter(SQL, conn)
    Dim ds As New DataSet
    da.Fill(ds, "lang")
    conn.Close()
    'ListView1
    With ListView1
       .View = View.Details
       .HeaderStyle = ColumnHeaderStyle.Nonclickable ' set to whatever you need
       .Columns.Clear() ' make sure columns collection is empty
       ' Add 3 columns
       .Columns.Add(ds.Tables(0).Columns(0).ColumnName)
       .Columns.Add(ds.Tables(0).Columns(1).ColumnName)
       .Columns.Add(ds.Tables(0).Columns(2).ColumnName)
    End With
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
       ListView1.Items.Add(New ListViewItem({ds.Tables(0).Rows(i).Item(0).ToString(), _  
                                             ds.Tables(0).Rows(i).Item(1).ToString(), _ 
                                           ds.Tables(0).Rows(i).Item(2).ToString()}))
    Next
    

    ListView1 Example

    几点说明:

    1. 将列标题作为表/数据集中的列名
    2. 我使用Rows.Count来确定行数
    3. 我可以遍历列以将每个列添加为列标题,但选择这样做是为了您可以看到选择性添加与使用循环的自动添加。
    4. 这可以通过遍历列和字段来改进/更改。
    5. 没有错误检查
    6. 我在这里展示的是使用 SQLite。这可以是任何数据库/表。
    7. 有时行继续不起作用 (_)。如果您复制并粘贴,您可能需要删除这些内容并将其全部设为一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 2013-08-09
      • 2014-01-05
      • 1970-01-01
      • 2012-07-14
      • 2021-03-08
      • 1970-01-01
      • 2011-05-01
      相关资源
      最近更新 更多