dataset数据的删除问题

locateangel 2004-11-17 01:49:57
我有这样一个问题:this.dataSet11.Tables[0].Rows.RemoveAt(this.dataGrid1.CurrentRowIndex);删除了dataset里面的一条数据以后(我确认的确是删除了),通过this.sqlDataAdapter1.Update(dataSet11,"test1");update数据库以后,没有报任何错误,但是数据库中的数据却没有被删除,也就是说没有能和dataset同步。
我搜索了一下,发现很多大虾都曾经有过这样的问题,我想请教一下,你们都是怎么解决的?这个现象问题到底在哪里?
...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyhflying 2004-11-20
  • 打赏
  • 举报
回复
alias88()
能不能贴出完整的代码啊,
locateangel 2004-11-17
  • 打赏
  • 举报
回复
到目前为止我还没有使用代码添加,我只是通过绑定后的datagrid来添加然后update,没有写任何的添加代码,不过删除必须要写了。
locateangel 2004-11-17
  • 打赏
  • 举报
回复
alias大虾,我用 BindingManager bindManager=dataGrid.BindingContext[dataSource,dataMember];
bindManager.RemoveAt (bindManager.Position ); 这种方法,为什么每次删除的都是第一行?
wyhflying 2004-11-17
  • 打赏
  • 举报
回复
我也遇到dataset与数据库里边的数据同步的问题,好麻烦啊,帮你顶啊。
locateangel:添加记录同步这个怎么处理你知道吗?有代码的话贴上来我学习以下啊
jlhx_NET 2004-11-17
  • 打赏
  • 举报
回复
dataset.acceptedit = true;
xyjcool 2004-11-17
  • 打赏
  • 举报
回复 1
问题出在这:dataset采用的是根据各行的RowState来进行数据更新的,而你用RemoveAT是将一个数据行物理删除出dataset中,所以,在更新时,dataset就没有这个行,也就不会针对这个行来更新数据源了。如果想更新的话,请用Delete()来为dataset中要删除的行,加上一个删除标志,这样的话就可以了
locateangel 2004-11-17
  • 打赏
  • 举报
回复
ft

不懂
alias88 2004-11-17
  • 打赏
  • 举报
回复
建议数据的新增\更改\删除等操作不要直接在DataSet的DataTable操作
每个DataGrid最终都是绑定到DataView的,而这个DataView并不是固定的,当父表记录变化时,原DataView已DisiPose(),代之匹配父记录的新视图. 见到好些人从DataTable.DefaultVeiw去取这个视图,不出错才怪. 正解是不管父子表都从窗口的BindingContext取得BindingManagerBase, 使用EndCurrentEdit (),CancelCurrentEdit,RemoveAt,AddNew或Add,Position 等方法和属性来操作数据

你可以用反射器找到:Related_CurrencyManager 类,有ParentManager_CurrentChanged事件的处理,并见有调用其基类CurrencyManager.SetDataSourc函数证明里面使list=null,和去掉了ListChanged 事件,所以,如果关系中的子表绑定经理不随父表当前行的变化而刷新的话,会出现 ListChanged事件失效等等问题.


alias88 2004-11-17
  • 打赏
  • 举报
回复
.dataset11.Tables[0].Rows[this.dataGrid1.CurrentRowIndex].Delete()是错的,表的行数不对应dataGrid的行数,试想父子表中,显示在DataGrid中的数据要看与父表匹配的记录有多少,而不能看子DataTable.Rows呀
alias88 2004-11-17
  • 打赏
  • 举报
回复
没有同步删除的原因是在数据库中没有符合条件用来删除的记录:
sqlDataAdapter1.DeleteCommand的命令字串及条件参数是自动生成的那种, 你检查一下参数值就知道了,原因可能是为DataColumn设置了表达式引起的.

第二贴
BindingManager bindManager=dataGrid.BindingContext[dataSource,dataMember];
bindManager.RemoveAt (bindManager.Position ); //永远只删除当前行
locateangel 2004-11-17
  • 打赏
  • 举报
回复
怎样实现这样的功能:dataadapter-〉dataset-〉datagrid,当我选中datagrid中的某一条,点击按钮使其删除,但是不update dataadapter,只是在datagrid里面不显示此数据。当我删除多条以后,点击按钮保存,update 到 dataadapter里面去?
我在实现此功能的时候出现问题:我使用这样的语句来删除this.dataset11.Tables[0].Rows[this.dataGrid1.CurrentRowIndex].Delete();,但是当我第二次删除某条数据的时候,dataset里面数据表的row已经和datagrid的row错位了,也就是说,表单上显示的被选中数据,实际在datatable里面的row已经不是在datagrid里面的row了。

简单地说,就是怎样能取得我在datagrid里面选中的数据在datatable里面的真实的row?

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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