zoukankan      html  css  js  c++  java
  • 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#
  • 相关阅读:
    List接口之ArrayList
    锁定线程:同步方法
    锁定线程:同步块
    通过Lambda表达式实现多线程
    通过实现Runnable接口来实现多线程
    通过继承Thread类实现多线程
    super关键字的经典案例
    Merge Two Sorted Lists
    Remove Element
    Remove Duplicates from Sorted List
  • 原文地址:https://www.cnblogs.com/wenjieyatou/p/5625991.html
Copyright © 2011-2022 走看看