|  | 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年就过了!!!!

 
  
  
 
