WPF DataGrid的分页实现

时间:2023-02-18 10:02:38

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

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

    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. private void Binding(int number, int currentSize)
  3. {
  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. tbkCurrentsize.Text = currentSize.ToString();
  18. infoList = infoList.Take(number * currentSize).Skip(number * (currentSize - 1)).ToList();   //刷选第currentSize页要显示的记录集
  19. dataGrid1.ItemsSource = infoList;        //重新绑定dataGrid1
  20. }
  21. //分页方法写好了 接下来就是响应下一页,上一页,和跳转页面的事件了
  22. //先定义一个常量
  23. const int Num=12;  //表示每页显示12条记录
  24. //上一页事件
  25. private void btnUp_Click(object sender, RoutedEventArgs e)
  26. {
  27. int currentsize = int.Parse(tbkCurrentsize.Text); //获取当前页数
  28. if (currentsize > 1)
  29. {
  30. Binding(Num, currentsize - 1);   //调用分页方法
  31. }
  32. }
  33. //下一页事件
  34. private void btnNext_Click(object sender, RoutedEventArgs e)
  35. {
  36. int total = int.Parse(tbkTotal.Text); //总页数
  37. int currentsize = int.Parse(tbkCurrentsize.Text); //当前页数
  38. if (currentsize < total)
  39. {
  40. Binding(Num, currentsize + 1);   //调用分页方法
  41. }
  42. }
  43. //跳转事件
  44. private void btnGo_Click(object sender, RoutedEventArgs e)
  45. {
  46. int pageNum = int.Parse(tbxPageNum.Text);
  47. int total = int.Parse(tbkTotal.Text); //总页数
  48. if (pageNum >= 1 && pageNum <= total)
  49. {
  50. Binding(Num, pageNum);     //调用分页方法
  51. }
  52. }
  53. 原文参考  http://blog.csdn.net/sanjiawan/article/details/6785394#