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

昨夜園子猴子問了幾個我CYQ.Data使用的小問題,通過簡單解答後,他表示「媽媽不再用擔憂個人學習",並於過後以資鼓勵,但願這框架越走越好html

 

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

 

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

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,本節就介紹到這裏,謝謝觀賞。 

相關文章
相關標籤/搜索