在數(shù)據(jù)庫編程中,我們常常要將主表和子表分別綁定到兩個(gè)datagrid,同時(shí)還有一些textbox之類的
控件要顯示相應(yīng)datagrid中的數(shù)據(jù),這時(shí)候數(shù)據(jù)的同步就成了一個(gè)問題。這個(gè)問題的解決方法就是
使用bindingmanagerbase來管理數(shù)據(jù)了。在dataset中的兩個(gè)表之間添加關(guān)系
 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添加了一個(gè)子關(guān)系(childrelation)。
建立兩個(gè)bindingmanagerbase:
bindingmanagerbase bmmaster=mastergrid.bindingcontext[ds,”mastertablename”];
bindingmanagerbase bmslave=
 slavegrid.bindingcontext[ds,”mastertablename.relationname”];
建立好bindingmanagerbase之后,指定datagrid的datasource(最好是用setdatabinding來進(jìn)行綁定,指明datamember。如果你用datagrid.datasource=ds.tables[”tablename”]的話,對(duì)于子表對(duì)應(yīng)的bindingmanagerbase就起不了作用了,我也不知道是什么原因。應(yīng)該是slavegrid.bindingcontext[ds,”mastertablename.relationname”]的問題吧)
mastergrid.setdatabinding(ds,”mastertablename”);
slavegrid.setdatabinding(ds,”slavetablename”);
這時(shí)候mastergrid跟slavegrid已經(jīng)對(duì)應(yīng)起來了。
再綁定slavegrid對(duì)應(yīng)的textbox(比如說對(duì)應(yīng)于name列)
textboxname.databindings.add(”text”,ds,”mastertablename.relationname.name”);
注意帶下劃線的部分,不是用add(”text”,ds.tables[slavetablename],”name”)
也就是說,建立databindingmanager,綁定數(shù)據(jù)到dataset及textbox時(shí)都是以相應(yīng)的relation作為datamember的,而不是用只指定datasource的方法來進(jìn)行的。