好多年没有发博了,今天闲暇,把给公司做的ERP分页控件拿出来,有很多都用到分页的,所以就封装了一个UserControl分页控件,效果还不错,可以看看,先!
注意:有用到存储过程。
如果还不明白,请联系我!
效果图:
![]()
1 /// <summary>
2 /// 分页实体类
3 /// </summary>
4 public class Pager
5 {
6 #region Private Member
7
8 private int pageIndex=1; //当前页,默认第一页
9 private int pageSize=20; //页大小,默认20条目
10 private int pageCount; //总共页
11 private int recorderCount; //总共条目
12
13 #endregion
14
15 #region Public Attribute
16
17 /// <summary>
18 /// 当前页
19 /// </summary>
20 public int PageIndex
21 {
22 get { return pageIndex; }
23 set { pageIndex = value; }
24 }
25
26 /// <summary>
27 /// 页大小
28 /// </summary>
29 public int PageSize
30 {
31 get { return pageSize; }
32 set { pageSize = value; }
33 }
34
35 /// <summary>
36 /// 总共页
37 /// </summary>
38 public int PageCount
39 {
40 get
41 {
42 return recorderCount % pageSize > 0 ?
43 (recorderCount / pageSize) + 1 :
44 (recorderCount / pageSize);
45 }
46 set { pageCount = value; }
47 }
48
49 /// <summary>
50 /// 总共条目数
51 /// </summary>
52 public int RecorderCount
53 {
54 get { return recorderCount; }
55 set { recorderCount = value; }
56 }
57
58 #endregion
59
60 #region Initiliazation
61
62 /// <summary>
63 /// 无参构造
64 /// </summary>
65 public Pager() {}
66
67 /// <summary>
68 /// 有参构造
69 /// </summary>
70 /// <param name="pageSize"></param>
71 public Pager(int pageSize) {
72 this.pageSize = pageSize;
73 }
74
75 #endregion
76 }
2 /// 分页实体类
3 /// </summary>
4 public class Pager
5 {
6 #region Private Member
7
8 private int pageIndex=1; //当前页,默认第一页
9 private int pageSize=20; //页大小,默认20条目
10 private int pageCount; //总共页
11 private int recorderCount; //总共条目
12
13 #endregion
14
15 #region Public Attribute
16
17 /// <summary>
18 /// 当前页
19 /// </summary>
20 public int PageIndex
21 {
22 get { return pageIndex; }
23 set { pageIndex = value; }
24 }
25
26 /// <summary>
27 /// 页大小
28 /// </summary>
29 public int PageSize
30 {
31 get { return pageSize; }
32 set { pageSize = value; }
33 }
34
35 /// <summary>
36 /// 总共页
37 /// </summary>
38 public int PageCount
39 {
40 get
41 {
42 return recorderCount % pageSize > 0 ?
43 (recorderCount / pageSize) + 1 :
44 (recorderCount / pageSize);
45 }
46 set { pageCount = value; }
47 }
48
49 /// <summary>
50 /// 总共条目数
51 /// </summary>
52 public int RecorderCount
53 {
54 get { return recorderCount; }
55 set { recorderCount = value; }
56 }
57
58 #endregion
59
60 #region Initiliazation
61
62 /// <summary>
63 /// 无参构造
64 /// </summary>
65 public Pager() {}
66
67 /// <summary>
68 /// 有参构造
69 /// </summary>
70 /// <param name="pageSize"></param>
71 public Pager(int pageSize) {
72 this.pageSize = pageSize;
73 }
74
75 #endregion
76 }
界面设置
1 <UserControl x:Class="RanchUCS.UCPager"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
5 xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
6 Height="25" Width="Auto">
7
8 <Grid Background="AliceBlue">
9 <Grid.ColumnDefinitions>
10 <ColumnDefinition Width="200" />
11 <ColumnDefinition Width="*" />
12 <ColumnDefinition Width="20" />
13 <ColumnDefinition Width="20" />
14 <ColumnDefinition Width="130" />
15 <ColumnDefinition Width="20" />
16 <ColumnDefinition Width="20" />
17 </Grid.ColumnDefinitions>
18
19 <TextBlock x:Name="txbInfo" HorizontalAlignment="Left" Height="15" Margin="10,0,0,0"></TextBlock>
20
21 <Image x:Name="iFirst" ToolTip="首页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/first1.gif" PreviewMouseLeftButtonDown="iFirst_PreviewMouseLeftButtonDown" Grid.Column="2"/>
22 <Image x:Name="iPrev" ToolTip="上一页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/previous1.gif" PreviewMouseLeftButtonDown="iPrev_PreviewMouseLeftButtonDown" Grid.Column="3"/>
23
24 <WrapPanel Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center" Width="130">
25 <TextBlock Text="| " VerticalAlignment="Center"/>
26 <wfi:WindowsFormsHost Width="50">
27 <wf:NumericUpDown x:Name="nudPageIndex" KeyUp="nudPageIndex_KeyUp"/>
28 </wfi:WindowsFormsHost>
29 <TextBlock x:Name="txbTotalPageCount" VerticalAlignment="Center"/>
30 <TextBlock x:Name="txbGO" VerticalAlignment="Center" FontWeight="Bold" Text=" GO" PreviewMouseLeftButtonDown="txbGO_PreviewMouseLeftButtonDown"/>
31 <TextBlock Text=" | " VerticalAlignment="Center"/>
32 </WrapPanel>
33
34 <Image x:Name="iNext" ToolTip="下一页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/next1.gif" PreviewMouseLeftButtonDown="iNext_PreviewMouseLeftButtonDown" Grid.Column="5"/>
35 <Image x:Name="iLast" ToolTip="末页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/last1.gif" PreviewMouseLeftButtonDown="iLast_PreviewMouseLeftButtonDown" Grid.Column="6"/>
36
37 </Grid>
38 </UserControl>
39
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
5 xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
6 Height="25" Width="Auto">
7
8 <Grid Background="AliceBlue">
9 <Grid.ColumnDefinitions>
10 <ColumnDefinition Width="200" />
11 <ColumnDefinition Width="*" />
12 <ColumnDefinition Width="20" />
13 <ColumnDefinition Width="20" />
14 <ColumnDefinition Width="130" />
15 <ColumnDefinition Width="20" />
16 <ColumnDefinition Width="20" />
17 </Grid.ColumnDefinitions>
18
19 <TextBlock x:Name="txbInfo" HorizontalAlignment="Left" Height="15" Margin="10,0,0,0"></TextBlock>
20
21 <Image x:Name="iFirst" ToolTip="首页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/first1.gif" PreviewMouseLeftButtonDown="iFirst_PreviewMouseLeftButtonDown" Grid.Column="2"/>
22 <Image x:Name="iPrev" ToolTip="上一页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/previous1.gif" PreviewMouseLeftButtonDown="iPrev_PreviewMouseLeftButtonDown" Grid.Column="3"/>
23
24 <WrapPanel Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center" Width="130">
25 <TextBlock Text="| " VerticalAlignment="Center"/>
26 <wfi:WindowsFormsHost Width="50">
27 <wf:NumericUpDown x:Name="nudPageIndex" KeyUp="nudPageIndex_KeyUp"/>
28 </wfi:WindowsFormsHost>
29 <TextBlock x:Name="txbTotalPageCount" VerticalAlignment="Center"/>
30 <TextBlock x:Name="txbGO" VerticalAlignment="Center" FontWeight="Bold" Text=" GO" PreviewMouseLeftButtonDown="txbGO_PreviewMouseLeftButtonDown"/>
31 <TextBlock Text=" | " VerticalAlignment="Center"/>
32 </WrapPanel>
33
34 <Image x:Name="iNext" ToolTip="下一页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/next1.gif" PreviewMouseLeftButtonDown="iNext_PreviewMouseLeftButtonDown" Grid.Column="5"/>
35 <Image x:Name="iLast" ToolTip="末页" IsEnabled="False" Height="12" HorizontalAlignment="Left" Source="../Resources/Images/Pager/last1.gif" PreviewMouseLeftButtonDown="iLast_PreviewMouseLeftButtonDown" Grid.Column="6"/>
36
37 </Grid>
38 </UserControl>
39
界面逻辑
1 /// <summary>
2 /// 申明委托
3 /// </summary>
4 /// <param name="e"></param>
5 /// <returns></returns>
6 public delegate void EventPagingHandler(EventPagingArg e);
7
8 /// <summary>
9 /// UCPaging.xaml 的交互逻辑
10 /// </summary>
11 public partial class UCPager : UserControl
12 {
13 #region Pirvate Member
14
15 public Pager pager;
16 public DataTable dt;
17 public event EventPagingHandler EventPaging;
18
19 #endregion
20
21 /// <summary>
22 /// 无参构造
23 /// </summary>
24 public UCPager()
25 {
26 InitializeComponent();
27 pager = new Pager();
28 }
29
30 /// <summary>
31 /// 得到数据
32 /// </summary>
33 /// <param name="tableName"></param>
34 /// <param name="fldName"></param>
35 /// <param name="fldSort"></param>
36 /// <param name="strCondition"></param>
37 /// <returns></returns>
38 public void Bind()
39 {
40 if (this.EventPaging != null)
41 this.EventPaging(new EventPagingArg());
42
43 if (dt == null || dt.Rows.Count == 0)
44 {
45 this.Visibility = Visibility.Collapsed;
46 return;
47 }
48 else
49 this.Visibility = Visibility.Visible;
50
51 //--控制
52 this.txbInfo.Text = "第1-" + dt.Rows.Count + "条 共" + pager.RecorderCount + "条 | 第" + pager.PageIndex + "页 共" + pager.PageCount + "页";
53 this.nudPageIndex.Minimum = 1;
54 this.nudPageIndex.Maximum = pager.PageCount;
55 this.nudPageIndex.Value = pager.PageIndex;
56 this.txbTotalPageCount.Text = " / "+pager.PageCount;
57 if (pager.PageCount > 1 && pager.PageCount > pager.PageIndex)
58 {
59 this.iNext.Source = new BitmapImage(new Uri("../Resources/Images/Pager/next2.gif", UriKind.Relative));
60 this.iLast.Source = new BitmapImage(new Uri("../Resources/Images/Pager/last2.gif", UriKind.Relative));
61 this.iNext.IsEnabled = true;
62 this.iLast.IsEnabled = true;
63 }
64 else
65 {
66 this.iNext.Source = new BitmapImage(new Uri("../Resources/Images/Pager/next1.gif", UriKind.Relative));
67 this.iLast.Source = new BitmapImage(new Uri("../Resources/Images/Pager/last1.gif", UriKind.Relative));
68 this.iNext.IsEnabled = false;
69 this.iLast.IsEnabled = false;
70 }
71
72 if (pager.PageIndex > 1 && pager.PageIndex <= pager.PageCount)
73 {
74 this.iFirst.IsEnabled = true;
75 this.iPrev.IsEnabled = true;
76 this.iFirst.Source = new BitmapImage(new Uri("../Resources/Images/Pager/first2.gif", UriKind.Relative));
77 this.iPrev.Source = new BitmapImage(new Uri("../Resources/Images/Pager/previous2.gif", UriKind.Relative));
78 }
79 else
80 {
81 this.iFirst.Source = new BitmapImage(new Uri("../Resources/Images/Pager/first1.gif", UriKind.Relative));
82 this.iPrev.Source = new BitmapImage(new Uri("../Resources/Images/Pager/previous1.gif", UriKind.Relative));
83 this.iFirst.IsEnabled = false;
84 this.iPrev.IsEnabled = false;
85 }
86 }
87
88 /// <summary>
89 /// 得到数据
90 /// </summary>
91 /// <param name="tableName">表名</param>
92 /// <param name="fldName">要查询的字段(所有为*)</param>
93 /// <param name="fldSort">排序</param>
94 /// <param name="strCondition">Where条件</param>
95 /// <returns>返回DataTable,如要绑定控件,可自己转换成IList</returns>
96 public DataTable GetData(string tableName, string fldName, string fldSort,
97 string strCondition)
98 {
99 int pageCount = 0;
100 int recordCount = 0;
101 dt = PagingManage.GetDataSet(tableName, fldName, pager.PageSize, pager.PageIndex, fldSort,
102 strCondition, out pageCount, out recordCount);
103 pager.PageCount = pageCount;
104 pager.RecorderCount = recordCount;
105
106 return dt;
107 }
108
109 /// <summary>
110 /// 第一页
111 /// </summary>
112 /// <param name="sender"></param>
113 /// <param name="e"></param>
114 public void iFirst_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
115 {
116 this.pager.PageIndex = 1;
117 this.Bind();
118 }
119
120 /// <summary>
121 /// 上一页
122 /// </summary>
123 /// <param name="sender"></param>
124 /// <param name="e"></param>
125 public void iPrev_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
126 {
127 this.pager.PageIndex--;
128 this.Bind();
129 }
130
131 /// <summary>
132 /// 下一页
133 /// </summary>
134 /// <param name="sender"></param>
135 /// <param name="e"></param>
136 public void iNext_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
137 {
138 this.pager.PageIndex++;
139 this.Bind();
140 }
141
142 /// <summary>
143 /// 末页
144 /// </summary>
145 /// <param name="sender"></param>
146 /// <param name="e"></param>
147 public void iLast_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
148 {
149 this.pager.PageIndex = pager.PageCount;
150 this.Bind();
151 }
152
153 /// <summary>
154 /// 确定导航到指定页
155 /// </summary>
156 /// <param name="sender"></param>
157 /// <param name="e"></param>
158 private void nudPageIndex_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
159 {
160 if (e.KeyCode == System.Windows.Forms.Keys.Return)
161 {
162 this.pager.PageIndex = int.Parse(this.nudPageIndex.Value.ToString());
163 this.Bind();
164 }
165 }
166
167 /// <summary>
168 /// 确定导航
169 /// </summary>
170 /// <param name="sender"></param>
171 /// <param name="e"></param>
172 private void txbGO_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
173 {
174 this.pager.PageIndex = int.Parse(this.nudPageIndex.Value.ToString());
175 this.Bind();
176 }
177 }
178
179 /// <summary>
180 /// 自定义事件数据基类
181 /// </summary>
182 public class EventPagingArg : EventArgs
183 {
184 public EventPagingArg() { }
185 }
2 /// 申明委托
3 /// </summary>
4 /// <param name="e"></param>
5 /// <returns></returns>
6 public delegate void EventPagingHandler(EventPagingArg e);
7
8 /// <summary>
9 /// UCPaging.xaml 的交互逻辑
10 /// </summary>
11 public partial class UCPager : UserControl
12 {
13 #region Pirvate Member
14
15 public Pager pager;
16 public DataTable dt;
17 public event EventPagingHandler EventPaging;
18
19 #endregion
20
21 /// <summary>
22 /// 无参构造
23 /// </summary>
24 public UCPager()
25 {
26 InitializeComponent();
27 pager = new Pager();
28 }
29
30 /// <summary>
31 /// 得到数据
32 /// </summary>
33 /// <param name="tableName"></param>
34 /// <param name="fldName"></param>
35 /// <param name="fldSort"></param>
36 /// <param name="strCondition"></param>
37 /// <returns></returns>
38 public void Bind()
39 {
40 if (this.EventPaging != null)
41 this.EventPaging(new EventPagingArg());
42
43 if (dt == null || dt.Rows.Count == 0)
44 {
45 this.Visibility = Visibility.Collapsed;
46 return;
47 }
48 else
49 this.Visibility = Visibility.Visible;
50
51 //--控制
52 this.txbInfo.Text = "第1-" + dt.Rows.Count + "条 共" + pager.RecorderCount + "条 | 第" + pager.PageIndex + "页 共" + pager.PageCount + "页";
53 this.nudPageIndex.Minimum = 1;
54 this.nudPageIndex.Maximum = pager.PageCount;
55 this.nudPageIndex.Value = pager.PageIndex;
56 this.txbTotalPageCount.Text = " / "+pager.PageCount;
57 if (pager.PageCount > 1 && pager.PageCount > pager.PageIndex)
58 {
59 this.iNext.Source = new BitmapImage(new Uri("../Resources/Images/Pager/next2.gif", UriKind.Relative));
60 this.iLast.Source = new BitmapImage(new Uri("../Resources/Images/Pager/last2.gif", UriKind.Relative));
61 this.iNext.IsEnabled = true;
62 this.iLast.IsEnabled = true;
63 }
64 else
65 {
66 this.iNext.Source = new BitmapImage(new Uri("../Resources/Images/Pager/next1.gif", UriKind.Relative));
67 this.iLast.Source = new BitmapImage(new Uri("../Resources/Images/Pager/last1.gif", UriKind.Relative));
68 this.iNext.IsEnabled = false;
69 this.iLast.IsEnabled = false;
70 }
71
72 if (pager.PageIndex > 1 && pager.PageIndex <= pager.PageCount)
73 {
74 this.iFirst.IsEnabled = true;
75 this.iPrev.IsEnabled = true;
76 this.iFirst.Source = new BitmapImage(new Uri("../Resources/Images/Pager/first2.gif", UriKind.Relative));
77 this.iPrev.Source = new BitmapImage(new Uri("../Resources/Images/Pager/previous2.gif", UriKind.Relative));
78 }
79 else
80 {
81 this.iFirst.Source = new BitmapImage(new Uri("../Resources/Images/Pager/first1.gif", UriKind.Relative));
82 this.iPrev.Source = new BitmapImage(new Uri("../Resources/Images/Pager/previous1.gif", UriKind.Relative));
83 this.iFirst.IsEnabled = false;
84 this.iPrev.IsEnabled = false;
85 }
86 }
87
88 /// <summary>
89 /// 得到数据
90 /// </summary>
91 /// <param name="tableName">表名</param>
92 /// <param name="fldName">要查询的字段(所有为*)</param>
93 /// <param name="fldSort">排序</param>
94 /// <param name="strCondition">Where条件</param>
95 /// <returns>返回DataTable,如要绑定控件,可自己转换成IList</returns>
96 public DataTable GetData(string tableName, string fldName, string fldSort,
97 string strCondition)
98 {
99 int pageCount = 0;
100 int recordCount = 0;
101 dt = PagingManage.GetDataSet(tableName, fldName, pager.PageSize, pager.PageIndex, fldSort,
102 strCondition, out pageCount, out recordCount);
103 pager.PageCount = pageCount;
104 pager.RecorderCount = recordCount;
105
106 return dt;
107 }
108
109 /// <summary>
110 /// 第一页
111 /// </summary>
112 /// <param name="sender"></param>
113 /// <param name="e"></param>
114 public void iFirst_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
115 {
116 this.pager.PageIndex = 1;
117 this.Bind();
118 }
119
120 /// <summary>
121 /// 上一页
122 /// </summary>
123 /// <param name="sender"></param>
124 /// <param name="e"></param>
125 public void iPrev_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
126 {
127 this.pager.PageIndex--;
128 this.Bind();
129 }
130
131 /// <summary>
132 /// 下一页
133 /// </summary>
134 /// <param name="sender"></param>
135 /// <param name="e"></param>
136 public void iNext_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
137 {
138 this.pager.PageIndex++;
139 this.Bind();
140 }
141
142 /// <summary>
143 /// 末页
144 /// </summary>
145 /// <param name="sender"></param>
146 /// <param name="e"></param>
147 public void iLast_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
148 {
149 this.pager.PageIndex = pager.PageCount;
150 this.Bind();
151 }
152
153 /// <summary>
154 /// 确定导航到指定页
155 /// </summary>
156 /// <param name="sender"></param>
157 /// <param name="e"></param>
158 private void nudPageIndex_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
159 {
160 if (e.KeyCode == System.Windows.Forms.Keys.Return)
161 {
162 this.pager.PageIndex = int.Parse(this.nudPageIndex.Value.ToString());
163 this.Bind();
164 }
165 }
166
167 /// <summary>
168 /// 确定导航
169 /// </summary>
170 /// <param name="sender"></param>
171 /// <param name="e"></param>
172 private void txbGO_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
173 {
174 this.pager.PageIndex = int.Parse(this.nudPageIndex.Value.ToString());
175 this.Bind();
176 }
177 }
178
179 /// <summary>
180 /// 自定义事件数据基类
181 /// </summary>
182 public class EventPagingArg : EventArgs
183 {
184 public EventPagingArg() { }
185 }

浙公网安备 33010602011771号