博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MDataTable属性RecordsAffected新应用:WebService与Json交互的记录总数
阅读量:6954 次
发布时间:2019-06-27

本文共 2557 字,大约阅读时间需要 8 分钟。

一:事出总有因:

 

1:需要来源:

最近有网友给我问了一个需求功能,大体需要功能如下: 

1:有一台服务器,以WebService或WCF方式提供数据。
2:有客户端(Web或Winform),调用远程WebService或WCF的数据,然后绑定显示表格数据,关键还需要带有分页功能。

2:解决方案: 

由于网友使用  ,我给出了以下建议:

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
";
        }
    }
} 

最终简单的效果图:

 

以上就是  V5版本MDataTable的RecordsAffected属性的应用场景之一。

 

示例源码打包下载(对于WebService可能需要重新添加引用下):

你可能感兴趣的文章
hive中的NULL
查看>>
进程死锁(银行家算法)
查看>>
FragmentTransaction add 和 replace 完全解析
查看>>
1. ASIHttpRequest-创建和执行request
查看>>
mysql中某张表修改较大时的处理
查看>>
如何退出telnet界面
查看>>
nginx+多个tomcat配置
查看>>
sublime实用插件-持续更新
查看>>
DotImage使用教程:从数据库中读写图像
查看>>
行业虚拟化发展趋势——“瑞友杯”虚拟化征文
查看>>
XY问题在开发中的体现
查看>>
更换或加装网卡的eth编号顺序配置
查看>>
Executors下面的线程池实现
查看>>
锐捷CCNA系列(五) 交换机配置模式切换
查看>>
squid命中率监控软件安装
查看>>
备份 Outlook 2010 中接收到的邮件和联系人
查看>>
用open***组建lan to lan ***
查看>>
我的友情链接
查看>>
Invalid source HTML for this operation , Error In IE
查看>>
Linux服务器间建立双向信任-无密码相互访问
查看>>