iblog 5

苹果有iphone,我有iblog

导航

【已验证】WPF中DataGrid的分页

Posted on 2012-07-10 17:23  cbtech  阅读(7704)  评论(2编辑  收藏  举报

效果图:

 

前台代码:

 1 <Window x:Class="Ch12Sample_03.Window4"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="Window4" Height="307" Width="454" FontSize="14" >
 5     <Grid>
 6         <DataGrid AutoGenerateColumns="False" Height="148" HorizontalAlignment="Left" Margin="27,21,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="380" IsReadOnly="True" CanUserAddRows="False" VerticalScrollBarVisibility="Auto" SelectionMode="Single"  EnableRowVirtualization="False">
 7             <DataGrid.Columns>
 8                 <DataGridTextColumn Header="编号" Binding="{Binding Path=title_id}" />
 9                 <DataGridTextColumn Header="书名" Binding="{Binding Path=title}" />
10                 <DataGridTextColumn Header="价格" Binding="{Binding Path=price}" />
11             </DataGrid.Columns>
12         </DataGrid>
13         <Button Content="上一页" Height="23" HorizontalAlignment="Left" Margin="37,185,0,0" Name="button7" VerticalAlignment="Top" Width="65" Click="button7_Click" />
14         <Button Content="下一页" Height="23" HorizontalAlignment="Left" Margin="108,185,0,0" Name="button8" VerticalAlignment="Top" Width="59" Click="button8_Click" />
15         <Label Content="转到" Height="28" HorizontalAlignment="Left" Margin="173,186,0,0" Name="label6" VerticalAlignment="Top" />
16         <TextBox Height="23" HorizontalAlignment="Left" Margin="212,187,0,0" Name="textBox1" VerticalAlignment="Top" Width="53" />
17         <Button Content="GO" Height="23" HorizontalAlignment="Left" Margin="298,185,0,0" Name="button9" VerticalAlignment="Top" Width="96" Click="button9_Click" />
18         <Label Content="页" Height="28" HorizontalAlignment="Left" Margin="269,185,0,0" Name="label7" VerticalAlignment="Top" />
19         <Label Height="28" HorizontalAlignment="Left" Margin="120,228,0,0" Name="label8" VerticalAlignment="Top" Content="【第" />
20         <Label Content="1" Height="28" HorizontalAlignment="Left" Margin="157,228,0,0" Name="label1" VerticalAlignment="Top" />
21         <Label Content="页】" Height="28" HorizontalAlignment="Left" Margin="176,228,0,0" Name="label10" VerticalAlignment="Top" />
22         <Label Content="【共" Height="28" HorizontalAlignment="Left" Margin="242,228,0,0" Name="label11" VerticalAlignment="Top" />
23         <Label Content="1" Height="28" HorizontalAlignment="Left" Margin="280,228,0,0" Name="label2" VerticalAlignment="Top" />
24         <Label Content="页】" Height="28" HorizontalAlignment="Left" Margin="298,228,0,0" Name="label13" VerticalAlignment="Top" />
25     </Grid>
26 </Window>

后台代码:

 1 namespace Ch12Sample_03
 2 {
 3     /// <summary>
 4     /// MainWindow.xaml 的交互逻辑
 5     /// </summary>
 6     public partial class Window4 : Window
 7     {
 8 
 9         public Window4()
10         {
11             InitializeComponent();
12             DataGridBind(Convert.ToInt32(label1.Content));
13             //label11.Content的初值为1,即显示第1页
14         }
15 
16 
17         //每页显示5条记录
18         public const int pageSize = 5;
19 
20 
21         private void DataGridBind(int pageIndex)
22         {
23 
24             //pageIndex 当前页的序号
25             int recordsum=0;   //表中记录总数
26             int PageSum=0;     //总页数         
27             
28             PubsDataContext pubs = new PubsDataContext();
29 
30             var query = from title in pubs.titles
31                         select title;
32 
33             recordsum = query.Count();
34 
35             //判断总页数
36             if (recordsum % pageSize == 0)
37                 PageSum = recordsum / pageSize;
38             else
39                 PageSum = recordsum / pageSize + 1;
40 
41 
42             dataGrid1.ItemsSource = query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
43 
44 
45             label1.Content = Convert.ToString(pageIndex);
46             label2.Content = Convert.ToString(PageSum);
47         }
48 
49 
50         private void button7_Click(object sender, RoutedEventArgs e)
51         {
52             //上一页
53             if (Convert.ToInt32(label1.Content) > 1)
54                 DataGridBind(Convert.ToInt32(label1.Content)-1);
55 
56         }
57 
58         private void button8_Click(object sender, RoutedEventArgs e)
59         {
60             //下一页
61             if (Convert.ToInt32(label1.Content) < Convert.ToInt32(label2.Content))
62                 DataGridBind(Convert.ToInt32(label1.Content) + 1);
63         }
64 
65 
66         private void button9_Click(object sender, RoutedEventArgs e)
67         {
68             //调转到第n页
69             if(Convert.ToInt32(textBox1.Text)>=1 && Convert.ToInt32(textBox1.Text)<=Convert.ToInt32(label2.Content))
70                 DataGridBind(Convert.ToInt32(textBox1.Text));
71             
72         }
73 
74     }
75 }