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


相关文章
|
6月前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
158 0
|
JSON 前端开发 JavaScript
JavaWeb14(ajax02判断账号是否存在&JSON介绍&AJAX+JSON字符串和对象之间的转换&JSON实现自动补全)
JavaWeb14(ajax02判断账号是否存在&JSON介绍&AJAX+JSON字符串和对象之间的转换&JSON实现自动补全)
|
30天前
|
JSON 数据格式
用来返回Json数据格式的工具--通用类
用来返回Json数据格式的工具--通用类
17 1
|
5月前
|
JSON 中间件 Go
基于框架的服务创建处理json响应
【6月更文挑战第22天】本文探索Go的Gin框架:高性能HTTP服务与路由。Gin默认用encoding/json处理JSON响应,但可选jsoniter加速。
63 7
基于框架的服务创建处理json响应
|
JSON 前端开发 数据格式
前端——向json中添加或删除对象、属性
前端——向json中添加或删除对象、属性
|
JSON 数据格式 Python
django drf 案例--实现url编码和json和dict格式转化小工具(涉及定义模型类,序列化器,类视图,路由),接口测试
django drf 案例--实现url编码和json和dict格式转化小工具(涉及定义模型类,序列化器,类视图,路由),接口测试
|
SQL JSON 数据库
返回Json的层级结构
返回Json的层级结构
|
JSON 数据格式
fastadmin设置默认返回json类型
fastadmin设置默认返回json类型
520 0
|
JSON 安全 Go
Go 中使用 JSON 时,如何区分空字段和未设置字段
Go 中使用 JSON 时,如何区分空字段和未设置字段
599 0
|
Web App开发 程序员 API
C# web api 返回类型设置为json的两种方法
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心!    悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。
2293 0