使用DataRelation,快速的建立主檔Table與副檔Table的關係,在點擊主檔的DataGrid後,能立即自動的顯示該項目的明細資料於另一個DataGrid裡.
寫Master及Detail連動的功能很常見,就是點擊主清單時,在副清單會顯示出該項目的明細資料,但很多時候因為資料量的考量,都是點擊主清單時,再依點擊的項目至資料庫取回明細資料,這種寫法用久了,很容易就忘了還有DataRelation這種東西,沒錯,如果一開始就將所有的明細資料都從資料庫取出,資料量是很可怕的,所以點主檔再取明細是較好的做法,那DataRelation不就沒用處了?答案不盡然,就看是否用在對的地方,那些方面可以運作就不介紹了,接下來要講的是如何使用DataRelation.
這範例所表現出來的畫面如下 :
程式開始會先產生一些基本資料,左邊的Grid為主檔,右邊則為相關明細,當我點左邊的Judy時,右邊就會顯示Judy的資料,注意看,No是一樣的.
當我點擊Jack後,右邊的明細馬上就會自動帶出Jack的資料,此時的No一樣都是1了.
要做到這樣的效果一點也不難,也不用很久,除去基本資料的準備,建立DataRelation及丟到Grid,不過就五行程式碼(也可說只有三行,如果丟到DataGrid.DataSource不算).
程式碼如下 :

02

03

04

05

06

07

08

09

10

11

12 DataRow dr1 = dtm.NewRow();
13

14

15

16

17 DataRow dr2 = dtm.NewRow();
18

19

20

21

22 DataTable dtd = new DataTable("BasicDetail");
23

24

25

26 DataRow dr3 = dtd.NewRow();
27

28

29

30

31

32

33

34

35 DataRow dr4 = dtd.NewRow();
36

37

38

39

40

41

42

43

44

45

46

47

48 ds.Tables.Add(dtm);
49

50

51

52 //建立Relation
53

54

55

56

57 gridM.DataSource = bsm;//主表單的BindingSource
58

59

60

61

62

63

64

從第5行到50行都是準備資料,不是重點,重點在第53行,這行就是在建立主檔跟明細檔之間的關係"Relation",兩個Table要用那個欄位來串起來,以這個範來說,UserNo就是兩個Table的關聯欄位.
接下來第54行跟第55行分別是主檔跟副檔的BindingSource,基本上看起來差不多,但還是有些許差異,在第54行的主檔部份,可以看到new BindingSource(ds,"BasicMaster"),括號內的第一個參數是DataSet,第二個為主檔的Table名稱,而第55行的副檔部份就不一樣了,第一個參數放的是主檔的BindingSource,第二個參數則為DataRelation的名稱,接下來只要把這兩個BindingSource分別丟到主副DataGrid的DataSource即可.
就這麼簡單,Master跟Detail的連動就做好了,接下來就看各位怎麼去運用DataRelation的這個功能囉.
參考資料 :
範例下載 :