将数据从Datagridview加载到TextBox

时间:2019-08-31 18:38:00

标签: vb.net datagridview

我正在尝试将数据从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

我希望当我单击任何行时,它应该在文本框中显示内容。请协助。

3 个答案:

答案 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

希望这会有所帮助!