自动绑定数据源
自動綁定數據源
?
??? 實現數據控件與原始數據的綁定是實現數據展示與編輯的基本前提。在常規的設計模式下實現數據綁定有兩種方式:??? 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的過程中會進一步討論這些問題。
轉載于:https://www.cnblogs.com/broadview/archive/2009/04/16/1436900.html
總結
- 上一篇: AO 直接调用GeoProcessing
- 下一篇: visudo修改编辑器vim