昨夜園子猴子問了幾個我CYQ.Data使用的小問題,經過簡單解答后,他表示“媽媽再也不用擔心我的學習",並於事后以資鼓勵,希望這框架越走越好。
除了技術上的交流,雙方在生活,S上面的問題上也進行了雙邊友好交流,最后猴子給發了一個國外的Sex網站,對此分享行為,我表示高度贊賞。
好了,言歸正題,講點技術問題:
本節就講一下實現原理,具體源碼,可直接下載開源的V4.0可以學習。
下載地址: http://www.cyqdata.com/download/article-detail-426
CYQ.Data 支持的UI:WebForm和Winform 及實現原理:
涉及的內部2個類和一個接口:
MActionUI:
主要是對單行數據的操作,將單行的數據賦值到WebForm的服務器控件或Winform的控件。
其功能就是對UI控件單個取值和賦值,而新增的SetAll,可以批量把值賦值控件。
示例代碼:
{
if (action.Fill(id))
{
action.SetToAll( this);
}
}
就這么一行SetToAll(this),就秒殺了以前的N多的類似以下的代碼:
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等列表控件。
其功能其實很簡單,就是綁定列表控件,看以下以下代碼,大致就能理解了:
{
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();
}
}
通過多個分支,設置數據源的值,而經典的使用方式就是:
{
action.Select().Bind(gvUsers);
}
當然,這並不是最佳性能的使用方式,因為列表控件的綁定,最好是在數據庫鏈接關閉后再綁定,最佳性能寫法應該下:
using (MAction action = new MAction( " Users "))
{
dt = action.Select();
}
dt.Bind(gvUsers);
IUIValue:
這是一個支持自定義控件或第三方控件的接口,只要控件實現接口,也可以使用MActionUI的功能。
三個屬性,控件是否啟,控件ID,控件的值,這個一般只有自己編寫的自定義控件才會使用到。
UI這一塊差不多就講到這里了,實現還算簡單,但思路卻是多年經驗步步優化累積而來。
傳統非UI開發模式:
而這種交互中間,最常見的就是js,而交互的格式,json是深受喜愛的。
所以CYQ.Data 也考慮到這種開發模式的快速開發方式,通過GetFromJson與ToJson功能,實現簡單后端編碼:
示例代碼如:
using (MAction action = new MAction( " Users "))
{
if (action.Fill(id))
{
result=action.Data.ToJson();
}
}
Response.Write(result);
通過返回Json到客戶端,由客戶端js解析並顯示。
同樣的返過來批量取值:
using (MAction action = new MAction( " Users "))
{
action.GetFromJson(Request[ " json "]);
result = action.Insert();
}
Response.Write(result);
由客戶端js提交json格式的數據,而后台固定自動解析,入庫,相當方便。
OK,本節就介紹到這里,謝謝觀賞。