0

我有一个名为 users 的表,其中包含以下列

User_id,user_name,user_pwd,First_Name,Middle_Name,Last_Name and user_type.

我有一个名为 dst 的数据集,并在数据集中创建了一个名为 user 的表。现在我想用表用户中每一行的 ,user_Name填充列表框。First_NameLast_name

我可以一次添加一个列值,但不知道如何将每行的多个列值添加到列表框

Dim dt As DataTable = Dst.Tables("user")

For Each row As DataRow In dt.Rows
    lstUsers.Items.Add(row("User_Name"))
Next

上面的代码完美运行,但我还想同时将 First_name 和 last_name 添加到列表框中。

4

4 回答 4

1

使用与您相同的方法,但将所需的所有值放在一个字符串中。

Dim dt As DataTable = Dst.Tables("user")

For Each row As DataRow In dt.Rows
    Dim sItemTemp as String
    sItemTemp = String.Format("{0},{1},{2}", row("User_Name"), row("First_Name"), row("Last_Name"))
    lstUsers.Items.Add(sItemTemp)
Next

String.Format()函数将调用.ToString()所有参数。

在这种情况下,如果row(ColumnName)NULL value则只.ToString()返回空字符串

于 2013-03-16T14:38:37.690 回答
0

我可以建议您使用 ListView 控件而不是 Listbox 吗?

如果您进行切换,这里有一个示例子例程,您可以使用它来填充您说想要的数据。以你喜欢的方式调整它;有很大的改进空间,但你明白了一般的想法:

Public Sub FillUserListView(lstUsers As ListView, Dst As DataSet)

    Dim columnsWanted As List(Of String) = New List(Of String)({"User_Name", "First_Name", "Last_Name"})
    Dim dt As DataTable = Dst.Tables("user")
    Dim columns As Integer = 0
    Dim totalColumns = 0
    Dim rows As Integer = dt.Rows.Count

    'Set the column titles
    For Each column As DataColumn In dt.Columns
        If columnsWanted.Contains(column.ColumnName) Then
            lstUsers.Columns.Add(column.ColumnName)
            columns = columns + 1
        End If
        totalColumns = totalColumns + 1
    Next

    Dim rowObjects(columns - 1) As ListViewItem
    Dim actualColumn As Integer = 0

    'Load up the rows of actual data into the ListView
    For row = 0 To rows - 1
        For column = 0 To totalColumns - 1
            If columnsWanted.Contains(dt.Columns(column).ColumnName) Then

                If actualColumn = 0 Then
                    rowObjects(row) = New ListViewItem()
                    rowObjects(row).SubItems(actualColumn).Text = dt.Rows(row).Item(actualColumn)

                Else
                    rowObjects(row).SubItems.Add(dt.Rows(row).Item(actualColumn))
                End If

                lstUsers.Columns.Item(actualColumn).Width = -2  'Set auto-width

                actualColumn = actualColumn + 1
            End If
        Next

        lstUsers.Items.Add(rowObjects(row))
    Next

    lstUsers.View = View.Details 'Causes each item to appear on a separate line arranged in columns
End Sub
于 2017-07-25T14:12:08.683 回答
0

您有 2 个选择:

  1. 使用列表框:

要使用 ListBox,请将字体设置为像 courier new 一样的固定宽度(以便列对齐),然后添加如下项目:

For Each row As DataRow In dt.Rows
    lstUsers.Items.Add(RPAD(row("User_Name"),16) & RPAD(row("First_Name"),16) & RPAD(row("Last_Name"),16))
Next

RPAD 函数定义如下:

Function RPAD(a As Object, LENGTH As Object) As String
    Dim X As Object
    X = Len(a)
    If (X >= LENGTH) Then
        RPAD = a : Exit Function
    End If
    RPAD = a & Space(LENGTH - X)
End Function

根据您的情况调整 LENGTH 参数。为至少一个空间再添加一个。此解决方案不太理想,因为您必须对列宽进行硬编码。

  1. 使用 DataGridView 控件而不是 ListBox。这确实是最好的选择,如果您需要,您甚至可以通过设置选择整行的选项并将 CellBorderStyle 设置为 SingleHorizo​​ntal 使其表现得像 ListBox。在设计器中定义列,但无需设置宽度 - 列可以自动调整大小,我在下面的代码中设置了该选项。如果您仍然喜欢设置宽度,请注释掉 AutoSizeColumnsMode 行。

设置网格和添加行的代码如下所示:

    g.Rows.Clear() ' some of the below options are also cleared, so we set them again
    g.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
    g.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal
    g.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    g.AllowUserToAddRows = False
    g.AllowUserToDeleteRows = False
    g.AllowUserToOrderColumns = True
    For Each row As DataRow In dt.Rows
        g.Rows.Add(row("User_Name"), row("First_Name"), row("Last_Name"))
    Next
于 2016-05-04T01:39:48.553 回答
0

您现在可能已经解决了您的问题,但像我这样的其他用户可能会遇到问题。
上面给出的答案甚至对我有用,但我根据我想要的简单方式找到了相同的答案..

cmd = New SqlCommand("select User_Name, First_Name, Last_Name from User")
  Dim dr As SqlDataReader = cmd.ExecuteReader(YourConnectionString)

  If dr.HasRows Then
        Do While dr.Read
                        lst.Items.Add(dr.Item(0).ToString & " " & dr.Item(1).ToString & " " & dr.Item(2).ToString)
        Loop
  End If

这对我有用,可能是错误的方式,但我发现它很简单:)

于 2016-08-29T13:00:03.340 回答