使用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的数据绑定方法。这样的分页方法不知大家有何评价,欢迎拍砖。
/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的数据绑定方法。这样的分页方法不知大家有何评价,欢迎拍砖。
相关文章推荐
- 使用Silverlight3中的DataPager实现服务器端分页
- 使用Silverlight3中的DataPager实现服务器端分页[转]
- 使用Silverlight3中的DataPager实现服务器端分页
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(二)
- DataPager实现服务器端分页
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(一)
- 【转】使用 Entity Framework + ListView + DataPager 实现数据分页
- Silverlight - 没有RIA Services时使用Data Pager实现服务端数据分页
- 让DataPager分页控件实现服务器端分页
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- silverlight使用DataPager实现DataGrid分页
- 使用PEAR::Pager实现类似digg的分页风格
- 使用pager标签实现自动分页
- Android使用ViewPager+Fragment实现标签分页
- 在Spring Boot中使用Spring-data-jpa实现分页查询(转)
- 使用ViewPager和RecyclerView实现水平分页功能
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- 使用FragmentTabHost+Fragment+viewpager 实现滑动分页
- viewpager和以及在viewpager中使用FragmentPagerAdapter实现分页
- viewpager和以及在viewpager中使用FragmentPagerAdapter实现分页