一:事出總有因:
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
return _username;
_username = value;
private datetime _createtime;
public datetime createtime
return _createtime;
_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";
}
最終簡單的效果圖:
版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:
http://www.cnblogs.com/cyq1162/archive/2013/04/25/3040829.html