zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    表单工具可以什么
    页面嵌套的方式展现报表
    EChars图类型
    SVG图类型
    JSP <c:import>和<jsp:include>区别【转】
    Servlet配置
    jsp的scope属性【转载】
    Cookie、Session【转载】
    page、request、session、application区别【转载】
    C++笔记------static 和 const 在类中用法
  • 原文地址:https://www.cnblogs.com/cyq1162/p/3040829.html
Copyright © 2011-2022 走看看