关于c#中两个DataGrid绑定到主表和子表的数据同步问题
2024-07-21 02:18:26
供稿:网友
在数据库编程中,我们常常要将主表和子表分别绑定到两个datagrid,同时还有一些textbox之类的
控件要显示相应datagrid中的数据,这时候数据的同步就成了一个问题。这个问题的解决方法就是
使用bindingmanagerbase来管理数据了。在dataset中的两个表之间添加关系
private void createrelation(dataset ds,string relationname,string mastertablename,string slavetablename,string columnname)//
{
ds.tables[mastertablename].childrelations.add(relationname,ds.tables
mastertablename].columns [columnname],ds.tables[slavetablename].columns[columnname]);
}
这样就给主表mastertable添加了一个子关系(childrelation)。
建立两个bindingmanagerbase:
bindingmanagerbase bmmaster=mastergrid.bindingcontext[ds,”mastertablename”];
bindingmanagerbase bmslave=
slavegrid.bindingcontext[ds,”mastertablename.relationname”];
建立好bindingmanagerbase之后,指定datagrid的datasource(最好是用setdatabinding来进行绑定,指明datamember。如果你用datagrid.datasource=ds.tables[”tablename”]的话,对于子表对应的bindingmanagerbase就起不了作用了,我也不知道是什么原因。应该是slavegrid.bindingcontext[ds,”mastertablename.relationname”]的问题吧)
mastergrid.setdatabinding(ds,”mastertablename”);
slavegrid.setdatabinding(ds,”slavetablename”);
这时候mastergrid跟slavegrid已经对应起来了。
再绑定slavegrid对应的textbox(比如说对应于name列)
textboxname.databindings.add(”text”,ds,”mastertablename.relationname.name”);
注意带下划线的部分,不是用add(”text”,ds.tables[slavetablename],”name”)
也就是说,建立databindingmanager,绑定数据到dataset及textbox时都是以相应的relation作为datamember的,而不是用只指定datasource的方法来进行的。