使用数据绑定控件在 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#