加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

MDataTable属性RecordsAffected新应用:WebService与Json交互的

发布时间:2020-12-16 21:59:32 所属栏目:安全 来源:网络整理
导读:一:事出总有因: ? 1:需要来源: 最近有网友给我问了一个需求功能,大体需要功能如下:? 1:有一台服务器,以WebService或WCF方式提供数据。 2:有客户端(Web或Winform),调用远程WebService或WCF的数据,然后绑定显示表格数据,关键还需要带有分页功能

一:事出总有因:

?

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可能需要重新添加引用下):

Web.rar

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读