求救 DataGrigView与DataSet数据联动问题
一个窗体Form1,一个DataGridView,一个Button1,一个ToolStrip1按键代码如下:
Private DataSet1 As New DataSet
Private DataTable1 As New DataTable("DataTable1")
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim nc As DataColumn
nc = New DataColumn
nc.ColumnName = "列1"
nc.DataType = System.Type.GetType("System.String")
DataTable1.Columns.Add(nc)
nc = New DataColumn
nc.ColumnName = "列2"
nc.DataType = System.Type.GetType("System.Boolean")
DataTable1.Columns.Add(nc)
Dim dr As DataRow
dr = DataTable1.NewRow
dr(0) = "1234"
dr(1) = True
DataTable1.Rows.Add(dr)
dr = DataTable1.NewRow
dr(0) = "1"
dr(1) = True
DataTable1.Rows.Add(dr)
DataSet1.Tables.Add(DataTable1)
DataSet1.AcceptChanges()
DataGridView1.DataSource = DataSet1.Tables("DataTable1").DefaultView
DataGridView1.AllowUserToAddRows = False
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
If DataSet1.HasChanges(DataRowState.Modified) Then
Dim Dataset2 As DataSet
Dataset2 = DataSet1.GetChanges(DataRowState.Modified)
For Each dr As DataRow In Dataset2.Tables(0).Rows
MsgBox("列1:" & dr(0).ToString & "-- 列2:" & dr(1).ToString)
Next
DataSet1.AcceptChanges()
End If
End Sub
Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
DataGridView1.EndEdit()
If DataSet1.HasChanges(DataRowState.Modified) Then
Dim Dataset2 As DataSet
Dataset2 = DataSet1.GetChanges(DataRowState.Modified)
For Each dr As DataRow In Dataset2.Tables(0).Rows
MsgBox("列1:" & dr(0).ToString & "-- 列2:" & dr(1).ToString)
Next
DataSet1.AcceptChanges()
End If
End Sub
在ToolStripButton1_Click总是最后一行的修改变化没法捕捉,一定要离开当前行才可以捕捉到!但Button1_Click则不需要离开当前行,如何在ToolStripButton1_Click中实现Button1_Click的功能??????
[最优解释]
DataGridView1.CurrentCell=Nothing
结束编辑
[其他解释]
AcceptChanges() 则会把所有的 RowState 修改为 UnChange。
AcceptChanges 之后再 Update,就查不到被改变行,而不会去更新数据库。
ataRow 和 DataTable 类都具有 AcceptChanges 方法。 在 DataTable 级别调用 AcceptChanges,会为要调用的每个 DataRow 导致 AcceptChanges 方法。 同样,对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。 照这样,您可在多个级别上调用该方法。 调用 DataSet 的 AcceptChanges 将使您只需调用一次,即可对所有次级对象(例如表和行)调用该方法。 当对 DataSet 调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。 每个 DataRow 的 RowState 属性也都更改;Added 和 Modified 行变为 Unchanged,Deleted 行被移除。 如果 DataSet 包含 ForeignKeyConstraint 对象,则调用 AcceptChanges 方法还将导致强制实施 AcceptRejectRule。 注意 AcceptChanges and RejectChanges only apply to DataRow related changes (that is, Add, Remove, Delete, and Modify). 它们不适用于架构和结构方面的更改。
[其他解释]
VB.net资深人员去哪里了??
[其他解释]
没有人遇到这样的问题吗?再顶
[其他解释]
已解决!!!!!!!