您的位置:首页 > 其它

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

2009-08-31 18:44 471 查看
代振军同学的blog中描述了使用DataPager实现客户端分页:
/article/4598221.html
一般说来,在项目中一般很少使用这种客户端的分页方式,除非数据量很少(干脆不分页算了)。
把大量的数据一次性传输到客户端可不是个明智的做法,我们一般都是从客户端传入查找条件参数(包括过滤条件和分页条件参数),然后服务端从数据库中找出符合查找条件的的记录列表传输给客户端,客户端绑定到DataGrid控件上。
这里使用“开启了Silverlight的WCF服务”来和客户端(silverlight)程序进行通信,数据访问采用Ado.net Entity Framework,解决方案结构如图:
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的时候调用BindSource扩展方法来绑定总记录数和页大小;里面还有个关于Combobox的数据绑定方法。这样的分页方法不知大家有何评价,欢迎拍砖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: