好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

WebService与Json交互的记录总数

WebService与Json交互的记录总数

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

 

版权声明:本文原创发表于  博客园 ,作者为  路过秋天  本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

 

分类:  CYQ.Data 框架系列

标签:  CYQ.Data ,  MDataTable ,  RecordsAffected

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于WebService与Json交互的记录总数的详细内容...

  阅读:46次