Silverlight 服务器端分页的自定义实现
2011-02-20 11:52
197 查看
目前较多的分页的实现,一种是客户端的分页如
[code]//SettheDataPagerandListBoxtothesamedatasource.
[/code]
但是我们都知道在数据量较大的时候,这种方式是不可用的。
另一种是使用DomainDataSource,但这对于非使用EF4的项目,或服务端不是.Net的系统显然也不是好的办法。
现分享一下我的实现方式。
JSON数据+IPagedCollectionView实现
关键步骤:
1、PagedServerCollection
类实现如下接口
其中IPagedCollectionView提供分页实现,INotifyPropertyChanged提供当前页、总页数等的变更通知,INotifyCollectionChanged提供内容变更通知,在结果变化时,让DataGrid等实现刷新。IEnumerable就不必说了。
2、DataLoader
与服务器端通信,提交参数,获取结果。用WebClient实现
3、PagedResult
一个简单的分页结果容器,显示总数、页码和当前页结果
4、Newtonsoft.Json
Json.Net开源项目,支持各个平台。实现序列化和反序列化。感觉比.Net自带的好用
http://json.codeplex.com/
使用示例:
XAML:
Code:
Models.User
Demo.aspx
效果:
当然这只是一个例子。如何更好的使用,还需要您做相应的修改
源码:这里
PagedCollectionViewitemListView=newPagedCollectionView(itemList);
[code]//SettheDataPagerandListBoxtothesamedatasource.
dataPager1.Source=itemListView;
dataGrid1.ItemsSource=itemListView;
[/code]
但是我们都知道在数据量较大的时候,这种方式是不可用的。
另一种是使用DomainDataSource,但这对于非使用EF4的项目,或服务端不是.Net的系统显然也不是好的办法。
现分享一下我的实现方式。
JSON数据+IPagedCollectionView实现
关键步骤:
1、PagedServerCollection
类实现如下接口
IPagedCollectionView,INotifyPropertyChanged,INotifyCollectionChanged,IEnumerable
其中IPagedCollectionView提供分页实现,INotifyPropertyChanged提供当前页、总页数等的变更通知,INotifyCollectionChanged提供内容变更通知,在结果变化时,让DataGrid等实现刷新。IEnumerable就不必说了。
2、DataLoader
与服务器端通信,提交参数,获取结果。用WebClient实现
3、PagedResult
一个简单的分页结果容器,显示总数、页码和当前页结果
4、Newtonsoft.Json
Json.Net开源项目,支持各个平台。实现序列化和反序列化。感觉比.Net自带的好用
使用示例:
XAML:
<Gridx:Name="LayoutRoot"Background="White"> <sdk:DataGridAutoGenerateColumns="True"Margin="9,10,11,42"Name="dataGrid1"/> <sdk:DataPagerHeight="28"Margin="10,0,12,8"Name="dataPager1"PageSize="10"VerticalAlignment="Bottom"/> </Grid>
Code:
vardata=newUtils.PagedServerCollection<Models.User>("/Demo.aspx");
dataGrid1.ItemsSource=data;
dataPager1.Source=data;
data.ToPage(0);
Models.User
[DataContract]
publicclassUser
{
[DataMember]
publicstringName{get;set;}
[DataMember]
publicintAge{get;set;}
[DataMember]
publicstringUsername{get;set;}
[DataMember]
publiclongRole{get;set;}
}
Demo.aspx
varpageindex=0;
varpagesize=20;
int.TryParse(Request["pageindex"],outpageindex);
int.TryParse(Request["pagesize"],outpagesize);
pageindex=Math.Max(0,pageindex);
pagesize=Math.Max(1,pagesize);
//
varresult=newPagedResult<User>
{
Count=5000,
PageIndex=pageindex
};
varitems=newList<User>();
for(inti=0;i<pagesize;i++)
{
items.Add(newUser
{
Name="User"+(pagesize*pageindex+i).ToString(),
Age=20,
Role=0x000100,
Username="Username"+(pagesize*pageindex+i).ToString()
});
}
result.Items=items;
Response.Write(JsonConvert.SerializeObject(result));
Response.End();
效果:
当然这只是一个例子。如何更好的使用,还需要您做相应的修改
源码:
相关文章推荐
- Silverlight自定义分页控件,实现客户端分页【效果图】
- silverlight 服务器端分页实现
- Silverlight学习笔记二:DataGrid 服务器端分页、排序的实现
- salesforce使用Apex控制器和VF实现自定义服务器端分页项目实战(自定义分页)
- DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除
- Silverlight控件DataGrid自定义模板(DataGridTextColumn.ElementStyle)实现居中对齐等复杂界面
- 使用Silverlight3中的DataPager实现服务器端分页
- silverlight 控件自定义样式 实现方法
- DataGrid实现自定义分页,轻易实现百万级数据分页
- 如何在DataGrid 控件中实现自定义分页操作
- DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除
- ASP.NET中自定义DataGrid分页设置的实现
- 实现自定义分页(如:改变传统datagrid的分页显示、通过A-Z的字母来分页等)、选择的check
- 实现自定义Silverlight版本检测和自定义升级Silverlight运行时方法
- 超简单的自定义标签封装实现的JSP分页显示功能
- 存储过程实现自定义分页
- 使用Gridview和ObjectDataSource轻松实现自定义分页
- 简单的自定义分页控件实现(Asp.net)
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除
- datatables+java实现服务器端分页,排序,查询,列的显示隐藏