使用数据绑定控件在 DataGridView 中添加行

Posted

技术标签:

【中文标题】使用数据绑定控件在 DataGridView 中添加行【英文标题】:Add row in DataGridView with data-bound control 【发布时间】:2015-10-30 17:44:41 【问题描述】:

我有一个带有两个 datagridview 的表单,它从 mysql 数据库中获取项目。

我的目标是单击第一个 DGV 的一个项目并将其插入第二个 DGV,然后(按下按钮)更新数据库中的表。

问题是我无法添加行(我得到异常:当数据绑定控件时,无法以编程方式将行添加到 DataGridView 中的行集)并且,如果我以编程方式填充最后一行(手动插入的行) 未获取值。

但如果我手动填写最后一行并按下“更新按钮”,数据库就会更新。

这是“CellContentClick”的代码

Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    Dim DvgRow% = e.RowIndex
    Dim DvgCol% = e.ColumnIndex
    Dim SelCell$ = Me.DataGridView1.Item(DvgCol, DvgRow).Value.ToString.Trim()
    Dim IntColSel$ = Me.DataGridView1.Columns(DvgCol).HeaderText

    Dim Dgv2Rows% = Me.DataGridView2.RowCount

    If IntColSel.ToUpper = "REGION" Then
        'Here I get the value in the last row but is ignored being updated
        Me.DataGridView2.Item(0, Me.DataGridView2.RowCount - 1).Value = SelCell 
        'Here I get exception
        Me.DataGridView2.Rows.Add() 
    End If
End Sub

这是填充第二个 DGV 的代码:

Private Sub GetInDGV2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click

    With DataGridView2
        .DataSource = Nothing
        .Rows.Clear()
        .Columns.Clear()
    End With
    cnString = "datasource=" + Server_Name + ";username= " + UserDB + _
        ";password=" + Password + ";database=" + Database_Name + ""
    sqlQRY2 = "Select Region from regions"
    conn = New MySqlConnection(cnString)
    Try
        conn.Open()
        da2 = New MySqlDataAdapter(sqlQRY2, conn)
        Dim cb2 As MySqlCommandBuilder = New MySqlCommandBuilder(da2)
        da2.Fill(ds2, "regions")
        DataGridView2.DataSource = ds2
        DataGridView2.DataMember = "regions"
    Catch ex As Common.DbException
        MsgBox(ex.ToString)
    Finally
        conn.Close()
    End Try
End Sub

我看到了this question aswered,但我无法从 C 中翻译出来并对其进行测试。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

由于 DataGridview2 绑定到 DataTable2,您不能直接修改单元格。您必须通过添加新的 DataRow 来更新 DataTable2。添加后,DataGRidView2 会自动刷新。

要获得填充新 DataRow 所需的 RowValues,您可以访问 DataTable1 DataRow。获取底层DataTable1的DataRow,对应dataGridView1的当前行:

Dim selectedrow As DataRow = DirectCast(DataGridView1.CurrentRow.DataBoundItem, DataRowView).Row ;

然后使用从 slectedrow 获得的值在 DataTable2 中创建一个新的 DataRow。

Dim dataTable2 As DataTable = ds2("Regions") 
Dim newrow As DataRow = dataTable2.NewRow() 
For i As Integer = 0 To selectedrow.Count - 1
  newrow(i) = selectedrow(i)
Next
dataTable2.Rows.Add(newrow)

【讨论】:

感谢您的回答,但我是自学成才的:您能解释一下吗? 好的,我已经理解了逻辑,但我无法编写我需要的代码。您的代码与我发布的代码无关。你能适应它吗?

以上是关于使用数据绑定控件在 DataGridView 中添加行的主要内容,如果未能解决你的问题,请参考以下文章

在C#里怎么将DataGridView控件和数据库的查询绑定起来啊。

C#datagridview控件绑定数据库,按照控件提示绑定后运行失败?

如何在一个DataGridView中的一列添加DateTimePicker控件 C#

datagridview控件必须绑定数据库才能使用吗

C# winform DataGridView控件DataSource 绑定一个表后修改cell值的问题

急,很急,非常急!!在vs窗体中用DataGridView控件时如何绑定数据库!!!