博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
阅读量:6411 次
发布时间:2019-06-23

本文共 2679 字,大约阅读时间需要 8 分钟。

昨夜园子猴子问了几个我CYQ.Data使用的小问题,经过简单解答后,他表示“妈妈再也不用担心我的学习",并于事后以资鼓励,希望这框架越走越好

除了技术上的交流,双方在生活,S上面的问题上也进行了双边友好交流,最后猴子给发了一个国外的S网站,对此分享行为,我表示高度赞赏。

好了,言归正题,讲点技术问题:

CYQ.Data 的使用操作方式,已经有相关文章介绍了,就不再介绍了。
本节就讲一下实现原理,具体源码,可直接下载开源的V4.0可以学习。
下载地址:

CYQ.Data 支持的UI:WebForm和Winform 及实现原理:

涉及的内部2个类和一个接口:

19012447-0a5efd0d744e431e936d9c2d11566dd

MActionUI:

主要是对单行数据的操作,将单行的数据赋值到WebForm的服务器控件或Winform的控件。

19014313-da85689fd4f64d9a817320a4bb9aebb

其功能就是对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等列表控件。

19015457-4999c9b6f25f432a9bd5765f62a1fb9

其功能其实很简单,就是绑定列表控件,看以下以下代码,大致就能理解了:

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的功能。

19020212-7006fec1bd2647d28a63c328d516f46

三个属性,控件是否启,控件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,本节就介绍到这里,谢谢观赏。

     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/1224922,如需转载请自行联系原作者
你可能感兴趣的文章
C++标准库简介(转)
查看>>
51nod 挑剔的美食家
查看>>
16. Vue 登录存储
查看>>
IE事件对象(The Internet Explorer Event Object)
查看>>
应用获取root权限分析及总结
查看>>
poj 2441 Arrange the Bulls (状态压缩dp+滚动数组)
查看>>
几种字符串加密解密的方法
查看>>
IT业常见职位英语缩写全攻略及详解
查看>>
python IO编程-序列化
查看>>
redis的分布式解决方式--codis (转)
查看>>
全自动Web后门扫描(转)
查看>>
html&javaScript&ajax部分
查看>>
[Go] golang缓冲通道实现资源池
查看>>
coursera machine learning note
查看>>
Spring框架及IOC容器
查看>>
Unity3D动画面板编辑器状态属性对照表
查看>>
iOS开发--面试
查看>>
小数位 处理函数
查看>>
mybatis中一对多关系实现中的错误
查看>>
js如何获取字符串第几次出现的位置
查看>>