MDataTable属性RecordsAffected新应用:WebService与Json交互的
一:事出总有因: ? 1:需要来源: 最近有网友给我问了一个需求功能,大体需要功能如下:?
1:有一台服务器,以WebService或WCF方式提供数据。
2:有客户端(Web或Winform),调用远程WebService或WCF的数据,然后绑定显示表格数据,关键还需要带有分页功能。
2:解决方案:? 由于网友使用?CYQ.Data?,我给出了以下建议:
1:WebService 端:
通过MAction,查询出表(MDataTable),再调用ToJson返回json输出。
2:客户端:
通过调用调用远程的方法,接收返回的json字符串,然后用MDataTable.LoadFromJson方法,加载还原为表格,然后绑定到列表控件即可。
3:分页控件:
http://www.cnblogs.com/cyq1162/category/259559.html
方法很简单,由于需要返回记录总数,所以可以返回“记录总数,Json“,然后接收后再分隔一下。 3:方案升级: 简单无极限,我想到了还可以再简单些的方式:? 我扫了下MDataTable,由于继续自IDataReader,所以有几个属性,好像派不上用场,存在也像是个浪费。 其中一个是:RecordsAffected,意思是受影响的记录总数,通常这个值默认为-1,99.9999%用不上。
?
为了使使用更简单,本人进行了以下的改进:
1:把调用Select分页查询后,把记录总数赋值给MDataTalle属性RecordsAffected。
2:对于ToJson方法输出,把记录总数也一并集在json中。
3:MDataTable.LoadFromJson时,可以还原记录总数到RecordsAffected属性。
?
有了以上改进,直接返回json即可,还原时也可以从RecordsAffected拿回记录总数,绑定到分页。 ?
二:代码示例:
? 花了些时间,写了一个Demo: 1:解决方案:? ? 2:界面Html: ? 3:WebService的代码示例: 为了方便,这里用了文本数据库示例: ?
namespace?MyService
{ ???? /// ? <summary> ???? /// ?UsersService?的摘要说明 ???? /// ? </summary> ????[WebService(Namespace?=? " http://tempuri.org/ ")] ????[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)] ????[ToolboxItem( false)] ???? public? class?UsersService?:?System.Web.Services.WebService ????{ ????????[WebMethod] ???????? public? string?GetTableJson( int?pageIndex,? int?pageSize) ????????{ ????????????CreateRow(pageIndex); ????????????MDataTable?dt; ???????????? using?(Users?u?=? new?Users()) ????????????{ ???????????????? int?count?=? 0; ????????????????dt?=?u.Select(pageIndex,?pageSize,? “id>1",? out?count); ????????????} ???????????? return?dt.ToJson(); ????????} ???????? // 产生表的数据 ???????? private? void?CreateRow( int?index) ????????{ ???????????? if?(index?==? 1) ????????????{ ???????????????? using?(Users?u?=? new?Users()) ????????????????{ ???????????????????? for?( int?i?=? 0;?i?<? 30;?i++) ????????????????????{ ????????????????????????u.UserName?=?i.ToString(); ????????????????????????u.CreateTime?=?DateTime.Now; ????????????????????????u.Insert(); ????????????????????} ????????????????} ????????????} ????????} ????} ???? // 为了省事,这里采用文本数据库做为示例。 ???? public? class?Users?:?CYQ.Data.Orm.OrmBase ????{ ???????? public?Users() ????????{ ???????????? base.SetInit( this,? " Users ",? " Txt?Path={0} "); ????????} ???????? private? int?_ID; ???????? public? int?ID ????????{ ???????????? get ????????????{ ???????????????? return?_ID; ????????????} ???????????? set ????????????{ ????????????????_ID?=?value; ????????????} ????????} ???????? private? string?_UserName; ???????? public? string?UserName ????????{ ???????????? get ????????????{ ???????????????? return?_UserName; ????????????} ???????????? set ????????????{ ????????????????_UserName?=?value; ????????????} ????????} ???????? private?DateTime?_CreateTime; ???????? public?DateTime?CreateTime ????????{ ???????????? get ????????????{ ???????????????? return?_CreateTime; ????????????} ???????????? set ????????????{ ????????????????_CreateTime?=?value; ????????????} ????????} ????} } ?
?
4:Web界面的代码:
namespace?Web
{ ???? public? partial? class?_Default?:?System.Web.UI.Page ????{ ???????? protected? void?Page_Load( object?sender,?EventArgs?e) ????????{ ???????????? if?(!IsPostBack) ????????????{ ????????????????LoadData(); ????????????} ????????} ???????? public? void?LoadData() ????????{ ????????????MyService.UsersService?us?=? new?MyService.UsersService(); ???????????? string?json=?us.GetTableJson(pager1.PageIndex,?pager1.PageSize); ????????????MDataTable?dt?=?MDataTable.LoadFromJson(json); ????????????dt.Bind(gvUsers); ????????????pager1.Count?=?dt.RecordsAffected; ????????????pager1.BindName?=? " LoadData "; ????????} ????} }? 最终简单的效果图: 以上就是?CYQ.Data?V5版本MDataTable的RecordsAffected属性的应用场景之一。
?
示例源码打包下载(对于WebService可能需要重新添加引用下): (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |