wpf DataGrid的分页实现

<DataGrid  Name="dataGrid1" AutoGenerateColumns="False">          <!--省略N个代码-->  </DataGrid>  <StackPanel Orientation="Horizontal">         <TextBlock Text="转到" Margin="5"/>         <TextBox Name="tbxPageNum" Text="" />         <TextBlock Text="页" />         <Button Content="GO"   Click="btnGo_Click"/>         <Button Name="btnUp" Content="上一页"  VerticalAlignment="Center" Click="btnUp_Click"/>          <Button Name="btnNext" Content="下一页"  VerticalAlignment="Center" Click="btnNext_Click"/>         <TextBlock Height="20">               <TextBlock Text="【共" />               <TextBlock Name="tbkTotal" Foreground="Red" />               <TextBlock Text="页】" />               <TextBlock Text="【当前" />               <TextBlock Name="tbkCurrentsize" Foreground="Red" />               <TextBlock Text="页】" />         </TextBlock>  </StackPanel>  </Grid> 

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

后台代码

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

原文地址:https://www.cnblogs.com/swarb/p/9924364.html