菜鸟问题:DataGrid中添加记录后更新显示错误!

alinzju 2002-11-07 11:05:06
初学VB.NET,在使用DataGrid时碰到问题如下:
我是用数据窗体向导添加的一个DataForm1,其中有一个grdDataGrid和三个按钮:加载、更新、全部取消。在运行程序时,我先按“加载”把表加载进来,然后我在最后一行后添加数据,当我输入完按“更新”按钮后发现在我添加的最后一行后又多了一条记录,而这条记录和第一条记录内容一模一样!再按一遍“加载”后,显示又正常了,请问这是怎么回事?
而且我增加几条记录按“更新”后最后就会多出几条第一条记录的Copy,而这只是显示问题,数据库中其实并无多出这几条记录,只要重新加载就好了。我完全是就向导添加的这个窗体,并没有手动在其中修改任何代码,怎么会有这种低级错误?这是VB.NET的BUG么?
...全文
26 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xumahua 2002-11-07
  • 打赏
  • 举报
回复
不是bug的原因,向导建立的窗体只具备一些简单的功能,更多的还需要你自己去做。
原因是在填充数据集(dataset)之前,没有将其清空。
在“更新”按钮事件中加:dataset.clear()
如果dataset中有多个表,可用dataset.tables("tablename").clear指定清空某一张表。
xumahua 2002-11-07
  • 打赏
  • 举报
回复
Merge方法是将当前的DataSet与指定的DataSet合并。
alinzju 2002-11-07
  • 打赏
  • 举报
回复
问题找到了,我把其中一行注释掉就可以了,但不明白那行有什么用,代码如下:

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
Try
'尝试更新数据源。
Me.UpdateDataSet()
Catch eUpdate As System.Exception
'在此处添加错误处理代码。
'显示错误信息(如果有)。
System.Windows.Forms.MessageBox.Show(eUpdate.Message)
End Try

End Sub

Public Sub UpdateDataSet()
'创建一个新数据集来保存对主数据集所做的更改。
Dim objDataSetChanges As WindowsApplication2.ds1 = New WindowsApplication2.ds1()
'停止当前的任何编辑。
Me.BindingContext(objds1, "renkou").EndCurrentEdit()
'获取对主数据集所做的更改。
objDataSetChanges = CType(objds1.GetChanges, WindowsApplication2.ds1)
'检查是否做了任何更改。
If (Not (objDataSetChanges) Is Nothing) Then
Try
'需要做一些更改,所以尝试通过调用 update 方法
'和传递数据集以及任何参数来更新数据源。
Me.UpdateDataSource(objDataSetChanges)
‘objds1.Merge(objDataSetChanges)
          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄问题在这,注释了就好了!
objds1.AcceptChanges()
Catch eUpdate As System.Exception
'在此处添加错误处理代码。
Throw eUpdate
End Try
'添加代码以检查返回的数据集中是否有任何可能已被
'推入到行对象错误中的错误。
End If

End Sub
xumahua 2002-11-07
  • 打赏
  • 举报
回复
如果是更新的话,换成下面的方法试试
假设 ds 是你的 dataset
假设 sqlAdpt 是你的 sqlDataAdapter
在"更新"按钮事件中写
dim sqlCB as new sqlcommandbuilder(sqlAdpt)
sqlAdpt.update(ds.getchanges,"tablename")
即可。
建议你还是自己写代码,不要依赖向导
alinzju 2002-11-07
  • 打赏
  • 举报
回复
可是这样的话更新后就只显示新加入的记录了啊

16,554

社区成员

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

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