求救 DataGrigView与DataSet数据联动问题

long_0662 2012-10-19 12:10:44
一个窗体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的功能??????
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝶恋花雨 2012-10-22
  • 打赏
  • 举报
回复

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). 它们不适用于架构和结构方面的更改。

qdu123 2012-10-22
  • 打赏
  • 举报
回复
DataGridView1.CurrentCell=Nothing
结束编辑
long_0662 2012-10-20
  • 打赏
  • 举报
回复
已解决!!!!!!!
long_0662 2012-10-20
  • 打赏
  • 举报
回复
没有人遇到这样的问题吗?再顶
long_0662 2012-10-20
  • 打赏
  • 举报
回复
VB.net资深人员去哪里了??

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧