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


版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2013/04/25/3040829.html

相关文章
|
1月前
|
JSON 程序员 数据格式
深入探索 “JSON for Modern C++“:安装、构建与应用
深入探索 “JSON for Modern C++“:安装、构建与应用
40 0
|
22天前
|
JSON JavaScript 前端开发
解锁JSON的奇妙世界:从基础到高级应用,一文搞懂JSON的妙用(中)
解锁JSON的奇妙世界:从基础到高级应用,一文搞懂JSON的妙用(中)
|
17天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
26 0
|
23天前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
17 1
|
23天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
1月前
|
XML JSON API
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
52 0
|
1月前
|
JSON 前端开发 API
Python中的JSON模块:从基础到高级应用全解析
【2月更文挑战第3天】 Python中的JSON模块:从基础到高级应用全解析
81 6
|
1月前
|
存储 JSON JavaScript
JSON应用
JSON应用
28 4
|
3月前
|
JSON PHP 数据格式
|
1月前
|
存储 JSON Apache
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
在最新发布的阿里云数据库 SelectDB 的内核 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%