Vb.net 从列表框或设置集合填充datagridview
在我的表单中有listbox(与设置连接的数据)和datagridview。我正在尝试从列表框填充datagridview的第0列。无法在web上找到解决方案,因此我尝试了以下方法:Vb.net 从列表框或设置集合填充datagridview,vb.net,datagridview,listbox,Vb.net,Datagridview,Listbox,在我的表单中有listbox(与设置连接的数据)和datagridview。我正在尝试从列表框填充datagridview的第0列。无法在web上找到解决方案,因此我尝试了以下方法: For i As Integer = 0 To ListBox1.Items.Count - 1 DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items Next 结果只是第0列中的一项:“Sy
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”
很明显,这与设置(listbox中的数据保存的位置)有关,我不知道如何修复它
另外,上面的代码也会从列表框中删除项目
编辑:
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
及
这会成功的
For Count = 0 To ListBox1.Items.Count -1
DataGridView1.Rows(i).Cells(Count).Value = ListBox1.Items(Count)
Next
试试这个代码。它起作用了
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
第一次尝试将所有LB项添加到单个cellWorks,第二次加载应用程序后,我收到以下错误:索引超出范围。必须是非。。。除第一项外,列表框中的所有项目都将被删除。项目存储在设置中。您的网格是否有静态的行(在设计时)?否。它是一个空的datagridview。列(两个)以加载形式创建。顺便说一句,我忘了说datagridview在单击“继续”(错误屏幕)后(使用您的代码)填充了剩余的一项。这就是问题所在。由于网格中没有任何行,因此首先必须在for循环中创建一行。接下来,您可以为第一个单元格赋值。是的,但它会在加载时向datagridview添加一个额外的行。另外,我在添加新项目后使用了该代码,因此每个新项目都会向datagridview添加另一行。当我在listbox中添加10个项目时,我将在datagridview中获得10个项目和10个空行。我已编辑了答案…如果它有助于向上投票并将其标记为解决方案,则从空列表框开始:在LB中添加第一个项目,将该值添加到DGV的1行,将第二项添加到LB将添加2行(其中一行包含第二项,第二行为空),第三行添加3行(一行包含项值,两行为空),依此类推。因此,您将同时添加每个列表框项以及gridview单元格值。它是?
For i As Integer = 0 To ListBox1.Items.Count - 1
DataGridView1.Rows(i).Cells(0).Value = ListBox1.Items(i)
Next
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