WPF DataGrid的分页实现

原理:其实分页功能的实现大家都清楚,无非就是把一个记录集通过运算来刷选里面对应页码的记录。

接来下我们再次添加新的代码

    1. <Grid>  
    2. <DataGrid  Name="dataGrid1" AutoGenerateColumns="False">  
    3.         <!--省略N个代码-->  
    4. </DataGrid>  
    5. <StackPanel Orientation="Horizontal">  
    6.        <TextBlock Text="转到" Margin="5"/>  
    7.        <TextBox Name="tbxPageNum" Text="" />  
    8.        <TextBlock Text="页" />  
    9.        <Button Content="GO"   Click="btnGo_Click"/>  
    10.        <Button Name="btnUp" Content="上一页"  VerticalAlignment="Center" Click="btnUp_Click"/>   
    11.        <Button Name="btnNext" Content="下一页"  VerticalAlignment="Center" Click="btnNext_Click"/>  
    12.        <TextBlock Height="20">  
    13.              <TextBlock Text="【共" />  
    14.              <TextBlock Name="tbkTotal" Foreground="Red" />  
    15.              <TextBlock Text="页】" />  
    16.              <TextBlock Text="【当前" />  
    17.              <TextBlock Name="tbkCurrentsize" Foreground="Red" />  
    18.              <TextBlock Text="页】" />  
    19.        </TextBlock>  
    20. </StackPanel>  
    21. </Grid

首先我们先写个分页的方法,供上面这些事件调用

后台代码

  1. //number表示每个页面显示的记录数    currentSize表示当前显示页数  
  2.   
  3.  private void Binding(int number, int currentSize)  
  4. {  
  5.       List<Information> infoList = new List<Information>();  
  6.       infoList = tbInfo.GetInformationList();      //获取数据源  
  7.       int count = infoList.Count;          //获取记录总数  
  8.       int pageSize = 0;            //pageSize表示总页数  
  9.       if (count % number == 0)  
  10.       {  
  11.            pageSize = count / number;  
  12.       }  
  13.       else  
  14.       {  
  15.            pageSize = count / number + 1;  
  16.       }  
  17.       tbkTotal.Text = pageSize.ToString();         
  18.   
  19.       tbkCurrentsize.Text = currentSize.ToString();     
  20.       infoList = infoList.Take(number * currentSize).Skip(number * (currentSize - 1)).ToList();   //刷选第currentSize页要显示的记录集  
  21.       dataGrid1.ItemsSource = infoList;        //重新绑定dataGrid1  
  22. }  
  23.   
  24.   
  25.   
  26. //分页方法写好了 接下来就是响应下一页,上一页,和跳转页面的事件了  
  27.   
  28. //先定义一个常量  
  29.   
  30.  const int Num=12;  //表示每页显示12条记录  
  31.   
  32. //上一页事件   
  33.   
  34.  private void btnUp_Click(object sender, RoutedEventArgs e)  
  35. {  
  36.      int currentsize = int.Parse(tbkCurrentsize.Text); //获取当前页数  
  37.      if (currentsize > 1)  
  38.      {  
  39.          Binding(Num, currentsize - 1);   //调用分页方法  
  40.      }  
  41. }  
  42.   
  43.   
  44. //下一页事件  
  45. private void btnNext_Click(object sender, RoutedEventArgs e)  
  46. {  
  47.      int total = int.Parse(tbkTotal.Text); //总页数  
  48.      int currentsize = int.Parse(tbkCurrentsize.Text); //当前页数  
  49.      if (currentsize < total)  
  50.     {  
  51.         Binding(Num, currentsize + 1);   //调用分页方法  
  52.     }  
  53. }  
  54.   
  55.   
  56. //跳转事件  
  57. private void btnGo_Click(object sender, RoutedEventArgs e)  
  58. {  
  59.     int pageNum = int.Parse(tbxPageNum.Text);  
  60.     int total = int.Parse(tbkTotal.Text); //总页数  
  61.     if (pageNum >= 1 && pageNum <= total)  
  62.     {  
  63.        Binding(Num, pageNum);     //调用分页方法  
  64.     }  
  65. 原文参考  http://blog.csdn.net/sanjiawan/article/details/6785394#
原文地址:https://www.cnblogs.com/wenjieyatou/p/5625991.html