Silverlight中MS有一个DataPager,不过用的是客户端分页和Asp.net中的GridView中分页思想一样,要进行服务端分页比较麻烦,因此我参考自己原来写的Flex分页写了一个自定义分页控件。
1.创建一个Silverlight 类库工程
2.创建一个Silverlight用户控件HahaPager
public class PageInfo { public int RecordCount { get; set; } public int PageSize { get; set; } public int PageIndex { get; set; } public int PageCount { get; set; } ///计算 public void Compute() { PageCount = RecordCount / PageSize; if (RecordCount % PageSize != 1) PageCount++; if (PageIndex > PageCount - 1) PageIndex = PageCount - 1; if (PageIndex < 0) PageIndex = 0; } public int StartIndex { get { return PageIndex * PageSize+1; } } public int Endindex { get { var index = PageIndex * PageSize + PageSize+1; return index > RecordCount ? RecordCount : index; } } public bool IsFirst { get { return PageIndex == 0; } } public bool IsLast { get { return PageIndex == PageCount - 1; } } public bool IsInMiddle { get { return !IsFirst && !IsLast; } } }
4.HahaPager页面放置一个Label和四个按钮效果如下:
XMAL内容如下:
<UserControl x:Class="HahaPagerUI.HahaPager" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="30" d:DesignWidth="505" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> <Grid x:Name="LayoutRoot" Background="#FFEFECEC"> <sdk:Label HorizontalAlignment="Left" Margin="10,0" Name="label1" VerticalAlignment="Center" Content="共100条每页10条 共10页第1页" /> <Rectangle HorizontalAlignment="Stretch" Margin="1" Name="rectangle1" stroke="Black" strokeThickness="1" VerticalAlignment="Stretch" /> <Button Content="◀◀" HorizontalAlignment="Right" Margin="5,5,125,5" Name="btnF" VerticalAlignment="Stretch" Width="36" Click="btnF_Click" /> <Button Content="◀" HorizontalAlignment="Right" Margin="5,85,5" Name="btnP" Width="36" Click="btnP_Click" /> <Button Content="▶" HorizontalAlignment="Right" Margin="5,45,5" Name="btnN" VerticalAlignment="Stretch" Width="36" Click="btnN_Click" /> <Button Content="▶▶" HorizontalAlignment="Right" Margin="5,5" Name="btnL" VerticalAlignment="Stretch" Width="36" Click="btnL_Click" /> </Grid> </UserControl>
cs代码如下:
public partial class HahaPager : UserControl { //页码改变事件 public event EventHandler PageIndexChanged; public HahaPager() { InitializeComponent(); Pi = new PageInfo(); NavString = "共{RecordCount}条每页{PageSize}条 共{PageCount}页第{PageIndex}页"; } public PageInfo Pi { get; set; } //绘制导航信息 public void Render() { string tmp = NavString.Replace("{RecordCount}","" + Pi.RecordCount) .Replace("{PageSize}","" + Pi.PageSize) .Replace("{PageCount}","" + Pi.PageCount) .Replace("{PageIndex}","" + (Pi.PageIndex + 1)) .Replace("{StartIndex}","" + Pi.StartIndex) .Replace("{Endindex}","" + Pi.Endindex); label1.Content = tmp; btnF.IsEnabled = btnP.IsEnabled = !Pi.IsFirst; btnN.IsEnabled = btnL.IsEnabled = !Pi.IsLast; } //导航字符串 public string NavString { get; set; } //首页 private void btnF_Click(object sender,RoutedEventArgs e) { Pi.PageIndex = 0; Render(); if (PageIndexChanged != null) { PageIndexChanged(this,e); } } //上一页 private void btnP_Click(object sender,RoutedEventArgs e) { Pi.PageIndex--; Pi.Compute(); Render(); if (PageIndexChanged != null) { PageIndexChanged(this,e); } } //下一页 private void btnN_Click(object sender,RoutedEventArgs e) { Pi.PageIndex++; Pi.Compute(); Render(); if (PageIndexChanged != null) { PageIndexChanged(this,e); } } //末页 private void btnL_Click(object sender,RoutedEventArgs e) { Pi.PageIndex = Pi.PageCount - 1; Render(); if (PageIndexChanged != null) { PageIndexChanged(this,e); } } }
控件基本完成,测试效果界面:
测试相关代码:
//加载时绑定数据 private void LayoutRoot_Loaded(object sender,RoutedEventArgs e) { //第一页数据 BookDAL.FindAllByPage(0,10,datas => { booksDataGrid.ItemsSource = datas; }); //获取页码 BookDAL.GetBookCount(data => { hahaPager1.Pi.RecordCount = data; hahaPager1.Pi.PageSize = 10; hahaPager1.Pi.Compute(); hahaPager1.Render(); }); } //页码改变时重新获取下一页数据 private void hahaPager1_PageIndexChanged(object sender,EventArgs e) { var pi=hahaPager1.Pi; BookDAL.FindAllByPage(pi.PageIndex,pi.PageSize,datas => { booksDataGrid.ItemsSource = datas; }); }
这只是初步实现!
封装了一个DLL,源码和封装后的DLL下载路径:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。