【问题标题】:Fill datagridview from listbox or settings collection从列表框或设置集合中填充 datagridview
【发布时间】:2014-05-07 09:38:57
【问题描述】:

我的表单中有列表框(与设置相关的数据)和datagridview。我正在尝试从列表框中填充 datagridview 中的第 0 列。在网上找不到解决方案,所以我尝试了这个:

            For i As Integer = 0 To ListBox1.Items.Count - 1

            DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items

        Next

结果只是第 0 列中的一项:“System.Windows.Forms.ListBox+ObjectCollection”

显然这与设置有关(保存列表框中的数据),我不知道如何解决。

附:上面的代码还会从列表框中删除项目!?

编辑:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    TextBox1.Visible = False
    For Each item As String In My.Settings.Setting
        ListBox1.Items.Add(item.ToString)
        DataGridView1.Columns.Add(("BNK"), "Bank")
        DataGridView1.Columns.Add(("ZR"), "2410")
        DataGridView1.RowHeadersVisible = False
        DataGridView1.Columns(0).Width = 55
        DataGridView1.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft
        DataGridView1.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft

        For i As Integer = 0 To ListBox1.Items.Count - 1
            Dim dr As New DataGridViewRow
            DataGridView1.Rows.Add(dr)
            DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items(i)
            DataGridView1.AllowUserToAddRows = False
        Next
    Next
End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    If Button3.Text = "Add a bank" Then
        TextBox1.Visible = True
        TextBox1.Text = ""
        TextBox1.Focus()
        Button3.Text = "Confirm"
    ElseIf Button3.Text = "Confirm" Then

        TextBox1.Visible = False
        Button3.Text = "Add a bank"
        Dim newURL As String = TextBox1.Text.ToString

        ListBox1.Items.Add(TextBox1.Text.ToString) 'add to ListBox1
        My.Settings.Setting.Add(TextBox1.Text.ToString) 'add to My.Settings.favList


    End If
End Sub

【问题讨论】:

  • 您正在尝试将所有 LB 项目添加到单个单元格中

标签: vb.net datagridview listbox


【解决方案1】:

试试这个代码。它有效

Private Sub Form_Load()
    dim cmd as SqlCommand("Select col1 from tblname",conn)
    dim da as new SqlDataAdapter(cmd)
    dim ds as new dataset
    da.fill(ds)
    Listbox1.datasource=ds
    ListBox1.DisplayMember = "col1"
    ListBox1.ValueMember = "col1"
    For i As Integer = 0 To ListBox1.Items.Count - 1
        Dim dr As New DataGridViewRow
        DataGridView1.Rows.Add(dr)
        DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items(i)
        DataGridView1.AllowUserToAddRows = False
    Next
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
dim cmd as new SqlCommand("insert into tblname values('" & textbox1.Text & "')",conn)
cmd.ExecuteNonQuery()
ListBox1.Items.Add(TextBox1.Text)
    For i As Integer = 0 To ListBox1.Items.Count - 1
        Dim dr As New DataGridViewRow
        DataGridView1.Rows.Add(dr)
        DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items(i)
        DataGridView1.AllowUserToAddRows = False
    Next
End Sub

【讨论】:

  • 是的,但它会在加载时向 datagridview 添加一个额外的行。我也在添加新项目后使用该代码,因此每个新项目都会向 datagridview 添加另一行。
  • 当我在列表框中添加 10 个项目时,我将在 datagridview 中获得 10 个项目和 10 个空行。
  • 我已经编辑了答案...如果它有助于投票并将其标记为解决方案
  • 从空列表框开始:在 LB 中添加第一项,将具有该值的 1 行添加到 DGV,将第二项添加到 LB 中添加 2 行(第 2 项第二行为空),第三添加 3行(一个带有项目值和两个空白行)等等。
  • 所以您同时添加了每个列表框项目以及 gridview 单元格值。是吗?
【解决方案2】:

这会成功的......

For Count = 0 To ListBox1.Items.Count -1 
   DataGridView1.Rows(i).Cells(Count).Value = ListBox1.Items(Count)
Next

【讨论】:

    【解决方案3】:
        For i As Integer = 0 To ListBox1.Items.Count - 1
    
            DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items(i)
    
        Next
    

    【讨论】:

    • 第一次工作,第二次加载应用程序后我收到此错误:索引超出范围。必须是非...此外,列表框中的每个项目,除了第一个项目都被删除。项目存储在设置中。
    • 您的网格是否有任何静态行(设计时)?
    • 没有。它是一个空的数据网格视图。列(两个)在 Form_load 中创建。顺便提一句。我忘了说在我单击继续(错误屏幕)后,datagridview 已填充(使用您的代码)剩下的一项。
    • 这就是问题所在。由于您的网格中没有任何行,因此首先您必须在 for 循环中创建一行。之后,您可以为第一个单元格分配值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2023-03-30
    相关资源
    最近更新 更多