编辑选定的Datagridview行vb.Net

编辑选定的Datagridview行vb.Net,vb.net,datagridview,Vb.net,Datagridview,我有一个四列的Datagridview网格。双击单元格时,所选行上的数据将传递到四个文本框,以便用户进行更改(如果有)。那么,如何传递对所选行所做的更改,而不是将更改添加为新行 另外,数据不是来自数据库您可以通过设置模块级变量“记住”数据网格视图行,也可以通过查找其主键再次找到该行 Public Class Form1 'Add to form: ' DataGridView called DataGridView1 ' 4 Textboxes called TextBox1, Te

我有一个四列的Datagridview网格。双击单元格时,所选行上的数据将传递到四个文本框,以便用户进行更改(如果有)。那么,如何传递对所选行所做的更改,而不是将更改添加为新行

另外,数据不是来自数据库

您可以通过设置模块级变量“记住”数据网格视图行,也可以通过查找其主键再次找到该行

Public Class Form1
  'Add to form:
  ' DataGridView called DataGridView1
  ' 4 Textboxes called TextBox1, TextBox2, TextBox3, and TextBox4
  ' Button called btnEdit
  ' Button called btnSave

  Private mintRowWeAreEditing As Integer = -1
  Private Sub btnEdit_Click(sender As Object, e As EventArgs) Handles btnEdit.Click
    If DataGridView1.DataSource Is Nothing Then
      'set initial data
      Dim dtb As New DataTable
      dtb.Columns.Add("Col1")
      dtb.Columns.Add("Col2")
      dtb.Columns.Add("Col3")
      dtb.Columns.Add("Col4")
      dtb.Rows.Add("R1C1", "R1C2", "R1C3", "R1C4")
      dtb.Rows.Add("R2C1", "R2C2", "R2C3", "R2C4")
      dtb.Rows.Add("R3C1", "R3C2", "R3C3", "R3C4")
      dtb.Rows.Add("R4C1", "R4C2", "R4C3", "R4C4")
      DataGridView1.DataSource = dtb
    End If
    'copy data from grid to textboxes
    mintRowWeAreEditing = DataGridView1.CurrentCell.RowIndex
    Dim drw As DataRow = DirectCast(DataGridView1.Rows(mintRowWeAreEditing).DataBoundItem, DataRowView).Row
    TextBox1.Text = drw("Col1").ToString
    TextBox2.Text = drw("Col2").ToString
    TextBox3.Text = drw("Col3").ToString
    TextBox4.Text = drw("Col4").ToString
  End Sub

  Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    'copy data from textboxes to grid
    If mintRowWeAreEditing = -1 Then Exit Sub 'haven't clicked Edit button yet
    Dim drw As DataRow = DirectCast(DataGridView1.Rows(mintRowWeAreEditing).DataBoundItem, DataRowView).Row
    drw("Col1") = TextBox1.Text
    drw("Col2") = TextBox2.Text
    drw("Col3") = TextBox3.Text
    drw("Col4") = TextBox4.Text
  End Sub
End Class

例如,您可以在按钮单击事件中执行类似的操作

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click


  Dim refNo As Integer = txtRefNo.Text     ' Change DataType and TextBox name as appropriate
  Dim firstName as String = txtFName.Text
    ' Repeat setting variables for each field in the row that you're updating

  For Each dgr As DataGridViewRow in DataGridView1.Rows
    If dgr.Item("RefNo") = refNo Then
      dgr.Cells(0).Value = firstName 'Instead of using (0) you can use the column name
      dgr.Cells(1).Value = newVar
    End If
  Next

 ' Commit the changes/refresh here

End Sub

我手头没有IDE来测试这一点,但如果有任何问题,请告诉我,我会研究一下。

网格中的数据是否存储在
数据表中?它是数据库中表的视图吗?显示一些设置网格数据源的代码。不,数据不是来自数据库。主键叫什么?我假设数据中有某种唯一的标识符?有一个RefNo列。这是我的唯一标识符Hanks也是David。