日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Silverlight3中的DataPager实现服务器端分页

發(fā)布時間:2025/4/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Silverlight3中的DataPager实现服务器端分页 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代振軍同學的blog中描述了使用DataPager實現(xiàn)客戶端分頁:
http://www.cnblogs.com/daizhj/archive/2009/08/07/1529331.html
一般說來,在項目中一般很少使用這種客戶端的分頁方式,除非數(shù)據(jù)量很少(干脆不分頁算了)。
把大量的數(shù)據(jù)一次性傳輸?shù)娇蛻舳丝刹皇莻€明智的做法,我們一般都是從客戶端傳入查找條件參數(shù)(包括過濾條件和分頁條件參數(shù)),然后服務端從數(shù)據(jù)庫中找出符合查找條件的的記錄列表傳輸給客戶端,客戶端綁定到DataGrid控件上。
這里使用“開啟了Silverlight的WCF服務”來和客戶端(silverlight)程序進行通信,數(shù)據(jù)訪問采用Ado.net Entity Framework,解決方案結構如圖:

建立了一個測試用的數(shù)據(jù)庫:包含兩張表:

該實例除了演示了使用DataPager的服務器端分頁外還實現(xiàn)了使用Entity SQL的動態(tài)查找功能:

分頁控件很多人都寫過,但不像DataPager那樣要傳入個PagedCollectionView才行,一般傳入總記錄數(shù)和分頁大小就可以了,所以,我們給Datapager增加一個擴展方法來綁定總記錄數(shù)和分頁大小:

Code
public?static?class?DataPageExtension
????{
????????
public?static?void?BindSource(this?DataPager?dataPager,?int?totalCount,?int?pageSize)
????????{
????????????List
<int>?list?=?new?List<int>(totalCount);
????????????
for?(int?i?=?0;?i?<?totalCount;?i++)?list.Add(i);
????????????PagedCollectionView?pcv?
=?new?PagedCollectionView(list);
????????????pcv.PageSize?
=?pageSize;
????????????dataPager.Source?
=?pcv;
????????}
????}

WCF服務端的分頁方法如下:

Code
?[OperationContract]
????????
public?List<MyEmployee>?GetEmployeeList(EmployeeFilter?filter,out?int?totalCount)
????????{
????????????
using?(TestDBEntities?db?=?new?TestDBEntities())
????????????{
????????????????
int?rowsCount?=?0;
????????????????StringBuilder?sbSql?
=?new?StringBuilder("True?");
????????????????
if?(filter.DeptID?!=?new?Guid())
????????????????????sbSql.Append(
string.Format("and?it.Departments.DepartmentID?=?Guid'{0}'",?filter.DeptID));
????????????????sbSql.Append(
string.Format("and?it.EmpolyeeName?like?'%{0}%'",?filter.EmpName));

????????????????var?query?
=?from?emp?in?db.Employees.Where(sbSql.ToString())
????????????????????????????select?
new?MyEmployee
????????????????????????????{
????????????????????????????????ID?
=?emp.EmployeeID,
????????????????????????????????Name?
=?emp.EmpolyeeName,
????????????????????????????????Sex?
=?emp.EmployeeSex???""?:?"",
????????????????????????????????Age?
=?emp.EmployeeAge,
????????????????????????????????Address?
=?emp.EmployeeAddress,
????????????????????????????????DeptName?
=?emp.Departments.DepartmentName
????????????????????????????};
????????????????
if?(filter.PageIndex?<=?0)
????????????????????rowsCount?
=?query.Count();
????????????????totalCount?
=?rowsCount;
????????????????query?
=?query.OrderBy(t?=>?t.Name).Skip(filter.PageIndex?*?filter.PageSize).Take(filter.PageSize);
????????????????
return?query.ToList();
????????????}
????????}

上面的代碼實現(xiàn)了使用Entity SQl的動態(tài)查找功能和分頁功能,可以看到:只有當pageindex 等于0的時候才計算總記錄數(shù),提高了方法執(zhí)行的效率;方法的輸入?yún)?shù)和輸出參數(shù)都進行了實體類的封裝,建議在實際項目中也這樣做,特別是在使用依賴注入的時候。
在客戶端(Silverlight項目)中引用好服務后,頁面的cs代碼如下:

Code
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Net;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Documents;
using?System.Windows.Input;
using?System.Windows.Media;
using?System.Windows.Media.Animation;
using?System.Windows.Shapes;
using?System.Windows.Data;
using?DataPagerTest.EmployeeServiceReference;

namespace?DataPagerTest
{
????
public?partial?class?MainPage?:?UserControl
????{
????????EmployeeServiceClient?client?
=?new?EmployeeServiceClient();
????????EmployeeFilter?filter?
=?new?EmployeeFilter();
????????
public?MainPage()
????????{
????????????InitializeComponent();
????????}
????????
private?void?UserControl_Loaded(object?sender,?RoutedEventArgs?e)
????????{
????????????dpEmployee.PageIndexChanged?
+=?new?EventHandler<EventArgs>(dpEmployee_PageIndexChanged);
????????????cbDept.SelectionChanged?
+=?new?SelectionChangedEventHandler(cbDept_SelectionChanged);
????????????BindCombox();
????????}

????????
void?cbDept_SelectionChanged(object?sender,?SelectionChangedEventArgs?e)
????????{
????????????BindGrid(
0);
????????}
????????
void?dpEmployee_PageIndexChanged(object?sender,?EventArgs?e)
????????{
????????????BindGrid(dpEmployee.PageIndex);
????????}
????????
private?void?btnQuery_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????BindGrid(
0);
????????}
????????
private?void?BindGrid(int?pageIndex)
????????{
????????????Departments?dept?
=?cbDept.SelectedItem?as?Departments;
????????????filter.DeptID?
=?dept.DepartmentID;
????????????filter.EmpName?
=?tbEmpName.Text.Trim();
????????????filter.PageIndex?
=?pageIndex;
????????????filter.PageSize?
=?9;
????????????client.GetEmployeeListCompleted?
+=?new?EventHandler<GetEmployeeListCompletedEventArgs>(client_GetEmployeeListCompleted);
????????????client.GetEmployeeListAsync(filter);
????????}
????????
void?client_GetEmployeeListCompleted(object?sender,?GetEmployeeListCompletedEventArgs?e)
????????{
????????????dgEmployee.ItemsSource?
=?e.Result;
????????????
if?(filter.PageIndex?<=?0)
????????????????dpEmployee.BindSource(e.totalCount,?filter.PageSize);
????????}
????????
void?BindCombox()
????????{
????????????client.GetDepartmentListCompleted?
+=?new?EventHandler<GetDepartmentListCompletedEventArgs>(client_GetDepartmentListCompleted);
????????????client.GetDepartmentListAsync();
????????}

????????
void?client_GetDepartmentListCompleted(object?sender,?GetDepartmentListCompletedEventArgs?e)
????????{
????????????cbDept.ItemsSource?
=?e.Result;
????????????cbDept.DisplayMemberPath?
=?"DepartmentName";
????????????cbDept.SelectedIndex?
=?0;
????????????BindGrid(
0);
????????}

????????
????????
????}
}

在PageIndex等于0的時候調(diào)用BindSource擴展方法來綁定總記錄數(shù)和頁大小;里面還有個關于Combobox的數(shù)據(jù)綁定方法。這樣的分頁方法不知大家有何評價,歡迎拍磚。

?2009-08-18 更新:修改了數(shù)據(jù)庫的Departments表結構,實現(xiàn)了在Combobox里顯示TreeView的效果(如效果圖)。

總結

以上是生活随笔為你收集整理的使用Silverlight3中的DataPager实现服务器端分页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产最新网址 | 中文视频在线 | 日日日人人人 | 国产精品无码一区二区三 | 在线免费看黄 | 无码一区二区波多野结衣播放搜索 | 日本黄色美女 | 黄色av软件| 午夜福利三级理论电影 | 欧美一区二区二区 | 香蕉视频免费在线观看 | 熟妇高潮喷沈阳45熟妇高潮喷 | 欧美精品久久久久久久免费 | 成人在线h | 久久三级网 | 欧美日韩首页 | 日本久久99 | 成人午夜在线 | 可以免费看污视频的网站 | 看黄色的网址 | 色污网站| 宅男在线视频 | 日本系列第一页 | 男生裸体视频网站 | 日韩av资源在线观看 | 中文字幕在线观看高清 | 久久av秘一区二区三区 | 亚洲成a人片在线www | 国产69精品久久久久久 | 欧美亚洲一区二区在线观看 | 91你懂的 | 成人福利在线播放 | 乱老熟女一区二区三区 | 青青草精品在线 | 找个毛片看看 | 奇米影视在线视频 | 色图色小说 | 女人18岁毛片 | 日韩免费视频 | 久久精品国产亚洲av麻豆 | 欧美日韩国产精品成人 | 亚洲网站一区 | 欧美一级淫片免费视频黄 | 色妻av | 免费av地址 | 福利免费在线观看 | 免费性网站 | 尤物网在线 | 日韩欧美一区二区三区久久婷婷 | www.xxxxx日本| 国产aⅴ无码片毛片一级一区2 | 亚洲精品国产精品乱码不99 | 国产第3页| 亚洲狼人综合网 | 四虎国产精品永久在线国在线 | 九九热在线视频免费观看 | 免费网站在线高清观看 | 亚洲人人在线 | 日韩精品一区二区三区无码专区 | 五月婷婷深深爱 | 可以看的毛片 | 中文字幕av在线播放 | 国产美女福利视频 | 丰满人妻一区二区三区精品高清 | 最新欧美日韩 | 精品无码m3u8在线观看 | 日日干夜夜爽 | 日韩一区二区三区网站 | 久久久久久伊人 | 欧美高清在线观看 | 中文字幕人妻丝袜乱一区三区 | 白峰美羽在线播放 | 国产吧在线 | 国产免费又粗又猛又爽 | 一本色道无码道dvd在线观看 | 欧美日韩中文字幕一区 | 熟女精品一区二区三区 | 美女一区二区三区四区 | 91久久超碰 | 国产精品久久av无码一区二区 | 久在操| 婷婷色激情 | 人妻av中文系列 | 日本啊v在线 | 在线观看麻豆av | 久久久久久久久久艹 | 亚洲国产精品久久久久爰色欲 | 动漫玉足吸乳羞免费网站玉足 | 免费激情小视频 | 偷偷操不一样的久久 | 爱逼av | 精品人妻少妇AV无码专区 | 另类综合网| 美女擦边视频 | 黄色激情在线 | 久九九| 亚洲天天综合 | 打美女白嫩屁屁网站 | 巨茎大战刘亦菲 |