一篇文章没看懂,大家帮忙看一下,帮顶有分

zbyh331 2006-01-13 04:18:37
主从Grid数据的保存

主从Grid,通过DataRelation连接,以实现表间关联。但是在新增、删除、修改时,就需要留意对DataRelation的影响。当主Grid是新增加的,从Grid增加行时,关联的键值不能自动读入,需要手工输入。
// 如果主Grid当前数据新增的:
if(((DataRowView)this.BindingContext[objMyDataSet,主Grid源].Current)
.Row.RowState == DataRowState.Added)
((DataRowView)this.BindingContext[objMyDataSet,从Grid源]
.Current)[关联列]
= ((DataRowView)this.BindingContext[objMyDataSet,主Grid源]
.Current)[关联列];
同时,从Grid增加行的事件中,必须让主Grid接受窗体上的数据。比如:
try
{
// 清除当前编辑内容
// 主Grid接受数据
this.BindingContext[objMyDataSet,主Grid源].EndCurrentEdit();

// 从Grid接受数据
this.BindingContext[objMyDataSet,从Grid源].EndCurrentEdit();
this.BindingContext[objMyDataSet,从Grid源].AddNew();
}
catch (System.Exception eEndEdit)
{
System.Windows.Forms.MessageBox.Show(eEndEdit.Message);
}
主从Grid数据的保存(续)

主从Grid数据保存时,必须按照一定顺序:先子表删除,后主表增加、修改、删除,最后子表增加、修改。具体用法和PB一样:
对数据缓冲区,按照行修改标志分别取删除、修改、增加的行,形成三个缓冲区:
1、对删除缓冲区:
objMyDataSetChanges = ((VATA.MyDataSet)
(objMyDataSet.GetChanges(DataRowState.Deleted)));
//子表更新:
objService.myUpdate(objMyDataSetChanges, 查询子表的SQL,子表名);
//主表更新:
objService.myUpdate(objMyDataSetChanges, 查询主表的SQL,主表名);
2、对增加缓冲区:
objMyDataSetChanges = ((VATA.MyDataSet)
(objMyDataSet.GetChanges(DataRowState.Added)));
//主表更新:
objService.myUpdate(objMyDataSetChanges, 查询主表的SQL,主表名);
//子表更新:
objService.myUpdate(objMyDataSetChanges, 查询子表的SQL,子表名);
3、对修改缓冲区:
objMyDataSetChanges = ((VATA.MyDataSet)
(objMyDataSet.GetChanges(DataRowState.Modified)));
//主表更新:
objService.myUpdate(objMyDataSetChanges, 查询主表的SQL,主表名);
//子表更新:
objService.myUpdate(objMyDataSetChanges, 查询子表的SQL,子表名);
和PB不太一样的地方是:PB的数据缓冲区操作没有C#这么方便。针对分离出来的数据缓冲区,PB大多需要手工操作,写SQL语句;C#中ADO.NET只需要指明查询表的语句,就可以自动生成更新的SQL。
产生上面的不同,主要原因在于:C#中ADO.NET是相对独立的,而PB中数据缓冲区和DataWindow或者DataStore结合太紧密。
C#中的ADO.NET,操作主从关系的Grid时,DataRelation必须动态生成。在每次从数据源加载数据时,都需要:
if(objMyDataSet.Relations.Contains("关系名"))
objMyDataSet.Relations.Remove("关系名")
objMyDataSet.Relations.Add(relMawbHawb)
这是由于DataRelation本质上是一张Table,数据内容记录的是主表和从表的对应关系。重新生成该关系,就是重新生成该表。否则,主从表显示不同步。
...全文
193 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyena041 2006-01-21
  • 打赏
  • 举报
回复
今天本来就头晕的很,现在更晕了
多给点分,让我好得更快点吧
哈哈哈哈
qhh389 2006-01-21
  • 打赏
  • 举报
回复
up
Eddie005 2006-01-21
  • 打赏
  • 举报
回复
这个顺序就跟我们在数据库里手动操作记录的顺序是一样的
主从表,设置了字段间的关联,但是不选择‘级联’更新/删除

那么,
删除时:先删子表的记录,然后再删主表记录;
修改时:先修改主表记录,然后修改子表记录;
增加时: 先增加主表记录,然后增加子表记录;
原文中用一句话来概括上面的3句话而已,不过是有点容易引起误解
zbyh331 2006-01-14
  • 打赏
  • 举报
回复
主从Grid数据保存时,必须按照一定顺序:先子表删除,后主表增加、修改、删除,最后子表增加、修改。这句没看懂,为什么是这个顺序啊
gngnandgngn 2006-01-13
  • 打赏
  • 举报
回复
没什么啊,就是主从结构的datagrid,你可以试着自己做一个就懂了.
最关键部分就是通过relation来取地子表格的数据源,
孟子E章 2006-01-13
  • 打赏
  • 举报
回复
哪不懂标出来
zbyh331 2006-01-13
  • 打赏
  • 举报
回复
草,白仍100分
Eddie005 2006-01-13
  • 打赏
  • 举报
回复
说的是winform下DataGrid主从表的显示,有哪里难理解的?
zbyh331 2006-01-13
  • 打赏
  • 举报
回复
文章出处:http://spaces.msn.com/members/tomlt/?partqs=ayear%3D2005%26amonth%3D7&_c11_blogpart_blogpart=blogview&_c=blogpart
flyinging 2006-01-13
  • 打赏
  • 举报
回复
还没学到这个程度,帮顶
zhongjy001 2006-01-13
  • 打赏
  • 举报
回复
是从当前的BindingContext来取这个数据,即DataSet 的内容
zhongjy001 2006-01-13
  • 打赏
  • 举报
回复
这个应该是2005里面的datagrid控件使用吧, 没有用过, 不过大概意思有那么一点

是有个DataSet的状态判断以及DataTable的关系

VATA.MyDataSet不知道是什么了
zbyh331 2006-01-13
  • 打赏
  • 举报
回复
晕,都是吃白食的,没高手吗?
kason_j 2006-01-13
  • 打赏
  • 举报
回复
帮顶
whslovexyp 2006-01-13
  • 打赏
  • 举报
回复
Up
cz眯眯眼 2006-01-13
  • 打赏
  • 举报
回复
我还是新手,看不懂,顶
hemeng 2006-01-13
  • 打赏
  • 举报
回复
up up
zqsntws 2006-01-13
  • 打赏
  • 举报
回复
很高深的样子,帮顶。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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