原理:其实分页功能的实现大家都清楚,无非就是把一个记录集通过运算来刷选里面对应页码的记录。
接来下我们再次添加新的代码
- <Grid>
- <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>
首先我们先写个分页的方法,供上面这些事件调用
后台代码
- //number表示每个页面显示的记录数 currentSize表示当前显示页数
- private void Binding(int number, int currentSize)
- {
- List<Information> infoList = new List<Information>();
- infoList = tbInfo.GetInformationList(); //获取数据源
- int count = infoList.Count; //获取记录总数
- int pageSize = 0; //pageSize表示总页数
- if (count % number == 0)
- {
- pageSize = count / number;
- }
- else
- {
- pageSize = count / number + 1;
- }
- tbkTotal.Text = pageSize.ToString();
- tbkCurrentsize.Text = currentSize.ToString();
- infoList = infoList.Take(number * currentSize).Skip(number * (currentSize - 1)).ToList(); //刷选第currentSize页要显示的记录集
- dataGrid1.ItemsSource = infoList; //重新绑定dataGrid1
- }
- //分页方法写好了 接下来就是响应下一页,上一页,和跳转页面的事件了
- //先定义一个常量
- const int Num=12; //表示每页显示12条记录
- //上一页事件
- private void btnUp_Click(object sender, RoutedEventArgs e)
- {
- int currentsize = int.Parse(tbkCurrentsize.Text); //获取当前页数
- if (currentsize > 1)
- {
- Binding(Num, currentsize - 1); //调用分页方法
- }
- }
- //下一页事件
- private void btnNext_Click(object sender, RoutedEventArgs e)
- {
- int total = int.Parse(tbkTotal.Text); //总页数
- int currentsize = int.Parse(tbkCurrentsize.Text); //当前页数
- if (currentsize < total)
- {
- Binding(Num, currentsize + 1); //调用分页方法
- }
- }
- //跳转事件
- private void btnGo_Click(object sender, RoutedEventArgs e)
- {
- int pageNum = int.Parse(tbxPageNum.Text);
- int total = int.Parse(tbkTotal.Text); //总页数
- if (pageNum >= 1 && pageNum <= total)
- {
- Binding(Num, pageNum); //调用分页方法
- }
- }
- 原文参考 http://blog.csdn.net/sanjiawan/article/details/6785394#