CYQ.Data 数据层框架CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。 |
CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
框架原理 |
|
|
| #楼主 |
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,本节就介绍到这里,谢谢观赏。
|
游客[注册][124.206.31.*]2013/6/19 11:13:17 | #1 | |
好文,找了好半天 |
发表评论
论坛公告
帖子搜索
最新帖子
最新评论
- 请教博主。我mysql的提示 V5.7.7.4 MySql.xxxx:check the tablename "tbl_site_info" is exist? error:ExeDataReader():Expression #1 of ORDER BY clause is not in SELECT list, references column 'information_schema.s1.ORDINAL_POSITION' which is not in SELECT list; this is incompatible with DISTINCT 配置如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="Conn" connectionString="host=192.168.3.101;Port=3306;Database=xxxxx;uid=root;pwd=2017" providerName="MySql.Data.MySqlClient"/> </connectionStrings> </configuration>
- 查询语句有点问题,软件启动时查询语句可以从数据库查询出数据,软件一直运行时无论怎么修改数据库,查询出来的还是老数据,不知道是为什么
- 我语句中用到了union all而且两个查询都有查询条件,action.select总是不成功,不知道有没有什么好的解决办法,谢谢
- 大神,如果我想通过一个对象(从数据映射过来的)要插入的话,我需要遍历字段然后每个set一下吗?有没有更好的方法??
- 真心好用,想问下秋天直接拼写sql怕注入吗
- V4.5后,好多方法都改变了,求来个新的日志帮助
- 請問大神V5源碼要多少錢 我是和交流過的
- 楼主,,从数据库里查出来并绑定datagridview,但是显示的都是数据库里的英文名,怎么改??好纠结啊这个。。。。
- 我想问一下,主从表添加怎样处理
- 10年就过了!!!!