物件導向之自動繫結資料來源

2021-04-26 17:56:38 字數 1404 閱讀 6849

物件導向之自動繫結資料來源

實現資料控制項與原始資料的繫結是實現資料展示與編輯的基本前提。在常規的設計模式下實現資料繫結有兩種方式:

1)第一種方式:在窗體上引用資料物件→逐個拖放控制項→分別設定控制項與字段的繫結關係。這無疑是個不厭其煩的重複過程,是個沒有任何創造性的過程,也是乙個容易出現隱性bug的設計過程。

2)另一種方式:通過生成器指定物理表與控制項的關係,由生成器完成控制項與資料來源的繫結。這裡的變化不過是把事後定義改變成事前定義,雖然增加了自動化成分,但在資料來源變化的時候這些結果也會同時付之東流。如果根據設計變化進行調整則會重複第一種方式的過程。

實現封裝的目的就是要徹底擺脫這種低能、低效的重複工作。為此,我們給控制項增加了「pi_繫結屬性」,同時還要遵行命名規則的必要約束。

由於需要實現資料繫結的控制項類不止這乙個,所以實現繫結的方法並不是基於控制項自身的封裝,如果在窗體中封裝了乙個遍歷的方法,就能通過一種簡單的方式實現窗體內所有具備「pi_繫結屬性」的資料來源繫結問題。

「pi_繫結屬性」具有雙重作用:通知執行繫結的程式自身是否要參與繫結處理;如果非null則表示參與繫結。繫結程式會繼續下面的動作:

1)得到「pi_繫結屬性」的值;

2)從該值得到所規定的屬性名(本例是控制項原有的text屬性);

3)按規定的屬性名(text)取出屬性中的值(本例是「tb_fr_名稱」);

4)找到第乙個下畫線(與此前的字元個數無關),擷取後面的部分作為欄位名(本例應是:「fr_名稱」);

5)按所得到的欄位名(「fr_名稱」)實現對資料集中對應欄位的繫結。

初看來,這似乎是個「多此一舉」的構思,其實不然,這裡解決了兩個非常重要的問題:

1)在窗體上布局資料控制項並不需要配置資料來源:「無錯**」是.net所標榜的程式設計機制,這就會導致在設計狀態下必須配置好資料來源才能允許放置與資料繫結有關的控制項。很多時候我們並不能在設計狀態下確定資料來源(只有在執行時才能給定),這就會給程式設計帶來一系列麻煩的事。在**中可以看到我們通過錯誤陷阱遮蔽了該環境下中的報錯,所以就能在沒有資料來源的情況完成對「tb_」例項的引用。

2)可以在執行狀態下配置資料來源是提高程式設計效率的乙個重要命題,這個設計為後續的自動化實現奠定了必要的基礎,也為執行狀態下的功能調整提供了可能性。

在這裡還要說明以下幾點:

1)也可以在「pi_繫結屬性」中填寫控制項的「name」屬性,因為「name =『tb_fr_名稱』」所以其效果相同。在乙個系統中對「pi_繫結屬性」的引用應當盡量保持一致,以便交流。

2)凡是繼承了「itf_繫結」介面的控制項都有同樣的功能。

3)按欄位名稱填寫控制項屬性是個煩瑣的工作,既然我們遮蔽了系統的自動化服務,勢必就要建立自己的自動化機制,否則就不能達到提高效率的目的。這部分請參看第8.3節。

這種繫結經常與窗體上的grid物件配合使用,承載控制項的容器與grid物件會通過更高層次的控制項屬性實現聯動。在自定義grid的過程中會進一步討論這些問題。

asp Repeater繫結資料來源

page language c autoeventwireup true codebehind showrepeater.aspx.cs inherits binddata.connection.showrepeater using system using system.collections.g...

gridview 繫結資料來源

本人剛剛學習asp.net c 整理一下關於 gridview的使用 if page.ispostback this.panel1.visible true this.gridview1.emptydatatext 暫沒有資料 this.gridview1.emptydatarowstyle.hor...

WPF繫結資料來源之RelativeSource

一.findancestor 有時候我們不確定作為資料來源的物件叫什麼名字,但知道作為繫結源與ui布局有相對的關係,如下是一段xaml 說明多層布局控制項中放置乙個文字控制項,來顯示父級控制項的名稱。1 xaml html 2 後台 csharp relativesource rs new rela...