VB.net Listview填充

时间:2014-03-09 14:34:07

标签: vb.net listview ms-access

我正在尝试用我的访问数据库中的项目填充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

所以基本上我想在评论下的用户和项目(3)下面的项目(2)。有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:4)

您正在添加等同于LV中的行的项目,您需要将User和Comment添加为SubItems(在视觉上等同于列)。

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

答案 1 :(得分:0)

我花了一段时间才弄清楚这个逻辑。我将在此再次作为进一步的示例进行重述。

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. 有时续行不起作用 (_)。如果您进行复制和粘贴,您可能需要删除这些内容并将其全部设为一行。