CYQ.Data 快速開發之UI(賦值、取值、綁定)原理


昨夜園子猴子問了幾個我CYQ.Data使用的小問題,經過簡單解答后,他表示“媽媽再也不用擔心我的學習",並於事后以資鼓勵,希望這框架越走越好

 

除了技術上的交流,雙方在生活,S上面的問題上也進行了雙邊友好交流,最后猴子給發了一個國外的Sex網站,對此分享行為,我表示高度贊賞。

 

好了,言歸正題,講點技術問題:

CYQ.Data 的使用操作方式,已經有相關文章介紹了,就不再介紹了。
本節就講一下實現原理,具體源碼,可直接下載開源的V4.0可以學習。
下載地址: http://www.cyqdata.com/download/article-detail-426

 

 

CYQ.Data 支持的UI:WebForm和Winform 及實現原理:

 

涉及的內部2個類和一個接口:

 

 

MActionUI:

主要是對單行數據的操作,將單行的數據賦值到WebForm的服務器控件或Winform的控件。

 

其功能就是對UI控件單個取值和賦值,而新增的SetAll,可以批量把值賦值控件。

示例代碼:

             using (MAction action =  new MAction( " Users "))
            {
                 if (action.Fill(id))
                {
                    action.SetToAll( this);
                }
            }

 

就這么一行SetToAll(this),就秒殺了以前的N多的類似以下的代碼:

txtID.Text = XXX.值1;
txtUserName.Text = XXX.值2;
txtFullName.Text = XXX.值3;
txtEmailName.Text = XXX.值4;
txtPassword.Text = XXX.值5;
....省略N個..... 

 

而且帶來的好處是,就算添加或減少字段顯示項,只要把頁面的控件去掉即可,並不即改動代碼。

 

那這個功能實現原理是什么?

其實就是“this",等於傳進了當前Page,然后只要遍歷Page的子控件,根據約定的“三個字母前綴”+字段名,就可以循環設置值了。

 

MBindUI:

主要是對多數據的操作,將多行的數據綁定到WebForm或Winform的GridView,Repleater,DropDownList等列表控件。

 

其功能其實很簡單,就是綁定列表控件,看以下以下代碼,大致就能理解了:

   public  static  void Bind( object ct,  object source)
        {
             if (ct  is GridView)
            {
                ((GridView)ct).DataSource = source;
                ((GridView)ct).DataBind();
            }
             else  if (ct  is Repeater)
            {
                ((Repeater)ct).DataSource = source;
                ((Repeater)ct).DataBind();
            }
             else  if (ct  is DataList)
            {
                ((DataList)ct).DataSource = source;
                ((DataList)ct).DataBind();
            }
             else  if (ct  is DataGrid)
            {
                ((DataGrid)ct).DataSource = source;
                ((DataGrid)ct).DataBind();
            }
             else  if (ct  is Win.DataGrid)
            {
                ((DataGrid)ct).DataSource = source;
            }
             else  if (ct  is Win.DataGridView)
            {
                ((System.Windows.Forms.DataGridView)ct).DataSource = source;
            }
             else  if (ct  is BaseDataList) // 基類處理
            {
                ((BaseDataList)ct).DataSource = source;
                ((BaseDataList)ct).DataBind();
            }
        }


通過多個分支,設置數據源的值,而經典的使用方式就是:

             using (MAction action =  new MAction( " Users "))
            {
                action.Select().Bind(gvUsers);
            } 

 

當然,這並不是最佳性能的使用方式,因為列表控件的綁定,最好是在數據庫鏈接關閉后再綁定,最佳性能寫法應該下:

            MDataTable dt;
             using (MAction action =  new MAction( " Users "))
            {
                dt = action.Select();
            }
            dt.Bind(gvUsers); 


IUIValue:

這是一個支持自定義控件或第三方控件的接口,只要控件實現接口,也可以使用MActionUI的功能。

三個屬性,控件是否啟,控件ID,控件的值,這個一般只有自己編寫的自定義控件才會使用到。

 

UI這一塊差不多就講到這里了,實現還算簡單,但思路卻是多年經驗步步優化累積而來。


傳統非UI開發模式: 

 

除開WebForm,事實還有很多種開發模式,但萬變不離其宗的是,本質是html元素通過GET、POST等方式提交與服務端交互。
而這種交互中間,最常見的就是js,而交互的格式,json是深受喜愛的。

 

 

所以CYQ.Data 也考慮到這種開發模式的快速開發方式,通過GetFromJson與ToJson功能,實現簡單后端編碼:

示例代碼如:

             string result;
             using (MAction action =  new MAction( " Users "))
            {
                 if (action.Fill(id))
                {
                    result=action.Data.ToJson();
                }
            }
            Response.Write(result); 

通過返回Json到客戶端,由客戶端js解析並顯示。

 

同樣的返過來批量取值:

             bool result;
             using (MAction action =  new MAction( " Users "))
            {
                action.GetFromJson(Request[ " json "]);
                result = action.Insert();
            }
            Response.Write(result); 

由客戶端js提交json格式的數據,而后台固定自動解析,入庫,相當方便。


OK,本節就介紹到這里,謝謝觀賞。 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM