我正在尝试将数据从DataGridview加载到文本框,但是它总是给我错误
我有一个DatagridView,它在加载表单时会加载一些数据,它包含从数据库加载的六(6)列数据。 单击任何行后,它应显示“行到文本框”的内容。
我不断收到错误消息:“索引超出范围必须为非负且小于集合参数索引的大小”
Try
Dim current_row As Integer = DataGridView1.CurrentRow.Index
txt_Prod_ID.Text = DataGridView1(0, current_row).Value
txtprodname.Text = DataGridView1(1, current_row).Value
txt_Barcode.Text = DataGridView1(2, current_row).Value
txt_barcode2.Text = DataGridView1(3, current_row).Value
txt_barcode3.Text = DataGridView1(4, current_row).Value
txt_barcode4.Text = DataGridView1(5, current_row).Value
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try
我希望当我单击任何行时,它应该在文本框中显示内容。请协助。
答案 0 :(得分:0)
此代码对我有用。在某些列中有空值,只是将文本框留空。
Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
Dim current_row As Integer = DataGridView1.CurrentRow.Index
Debug.Print(current_row.ToString)
TextBox1.Text = DataGridView1(0, current_row).Value.ToString
TextBox2.Text = DataGridView1(1, current_row).Value.ToString
TextBox3.Text = DataGridView1(2, current_row).Value.ToString
TextBox4.Text = DataGridView1(3, current_row).Value.ToString
End Sub
我通过调用以下子项以表格加载方式加载网格。
Private Sub FillBuildersGrid()
Dim dt As New DataTable
Using cn As New SqlConnection(My.Settings.BuildersConnectio)
Using cmd As New SqlCommand("Select * From Builders", cn)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dt
End Sub
答案 1 :(得分:0)
请检查任何单元格的值,无论是dbnull,空还是“”,都可以使用此方法:
If IsDBNull(DataGridView1(0, current_row).Value) Then
TextBox1.Text = ""
Else
TextBox1.Text = DataGridView1(0, current_row).Value.ToString
End If
答案 2 :(得分:0)
就像其他人提到的那样,如果正确设置了文本框,则使用BindingSource
将为您“自动”执行此操作。可以使用DataTable
本身来工作,但是下面的示例将DataTable
用作DataSource
的{{1}}并使用BindingSource
用作BindingSource
的{{1}},也用作DataSource
的{{1}}
“绑定” DataGridView
时,每个文本框都需要标识DataBinding
中要“绑定”到哪个“列”。然后,当用户在网格中选择一个单元格/行时,文本框将更改为与网格中的“选定”行匹配。显然,如果用户可以选择“多重选择”,则文本框将显示最后选择的行。
注意:当“选定行”更改时,绑定源将“更新”。这意味着,如果您更改网格中的值,然后在“相同”行中选择另一个单元格,则文本框将不会更新。一种可能的解决方案是连接网格单元格值更改事件,以简单地“重置”绑定源。无论选择哪个单元格,这都会更新文本框。
在此示例中,可以更改文本框中的文本,并且文本将在网格中反映/更新,但是,如果文本更改并且用户“离开“细胞”。
下面的代码应正确地将TextBoxes.
绑定到TextBox
(GridBinding)中的列。
BindingSource
使用上述方法的一个小例子如下所示。
TextBox
希望这会有所帮助!