昨夜園子猴子問了幾個我CYQ.Data使用的小問題,通過簡單解答後,他表示「媽媽不再用擔憂個人學習",並於過後以資鼓勵,但願這框架越走越好。html
除了技術上的交流,雙方在生活,S上面的問題上也進行了雙邊友好交流,最後猴子給發了一個國外的Sex網站,對此分享行爲,我表示高度讚揚。
數據庫
好了,言歸正題,講點技術問題:json
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,本節就介紹到這裏,謝謝觀賞。