[原创]C#之探索发现:在WinForm上写的一个模拟分页小程序

今天闲来无事,
有趣的东西。每天都在用C#这门语言,我这人比较爱钻牛角尖。今天我钻到了在Winform上写一个模拟分页的小程序。
分页程序,大家都不陌生。下面我将要实现的是,在一个Form控件上,通过一个RichTextBox进行显示‘未使用分页’之前的原始数据;用另一个RichTextBox显示‘正在分页’时的数据。下面我传上几张图,大家就明白了。(今天写的这篇日志,打算与朋友们分享,本人才书学浅,万一有不对之处,还望批评指证!)
图片:一 {显示的是界面,并且进行了分页显示,定位在第一页上} [原创]C#之探索发现:在WinForm上写的一个模拟分页小程序
图片:二 {我定位到了第2页,数据显式正常,能衔接上}
[原创]C#之探索发现:在WinForm上写的一个模拟分页小程序
图片:三 {我直接定位到了尾页,总记录数1万条,每页显示11条,最后一页只剩1条,这个是没错的。}
[原创]C#之探索发现:在WinForm上写的一个模拟分页小程序
上面先给大家展示了整个界面及显示效果。下面说一下我实现的方式:
这一万条数据,我是将其放在了List集合类里面了。然后进行各种处理。仅做了最简单的分页跳转,用四个按钮“首页,上一页,下一页,尾页”进行跳转控制。
整个小程序说明了什么呢?我相信有一些朋友,在使用分页代码时,有可能直接就Copy现成的放在自己的工程中,对分页它到底是怎么处理的心里或许不清楚。下面我将贴上处理分页的代码,其实很简单。主要也是想让您,不仅知其然,还要尽可能的知其所以然。程序中我加入了尽可能全面的注释。
或许会有朋友说我在‘多此一举’,没关系,只是想让跟我一样喜欢探索的朋友,尽可能的发现一些想知道的东西罢了。
代码如下:[首先贴上来的就是核心处理程序,WinForm各控件的属性代码文件我就不贴了]
分页处理程序代码
1 /* 2 * 由 左安坤 创建。 3 * 用户: Administrator 4 * 日期: 2011-9-14 5 * 时间: 9:29 6 * 7 * 8 * 9 1*1 0 1 10 2*1 (2-1) 2 11 3*1 (3-1) 3 12 13 ------------------ 14 10 15 16 1*10 (10-1) 10 17 2*10 (20-10) 20 18 3*10 (30-20) 30 19 ------------------- 20 公式: 分页原理 21 22 分页数 23 24 第一页 1 分页数 25 26 第二页 (当前页*分页数-分页数) 当前页*分页数 27 */ 28 29 using System; 30 using System.Collections.Generic; 31 using System.Text; 32 using System.Drawing; 33 using System.Windows.Forms; 34 35 namespace MoniPage 36 { 37 /// 38 /// Description of MainForm. 39 /// 40 public partial class MainForm : Form 41 { 42 [STAThread] 43 public static void Main(string[] args) 44 { 45 Application.EnableVisualStyles(); 46 Application.SetCompatibleTextRenderingDefault(false); 47 Application.Run(new MainForm()); 48 } 49 50 public MainForm() 51 { 52 // 53 // The InitializeComponent() call is required for Windows Forms designer support. 54 // 55 InitializeComponent(); 56 57 // 58 // TODO: Add constructor code after the InitializeComponent() call. 59 // 60 } 61 62 private List Y_data = new List(); //我自己声明的一个泛型集合,分页就是围绕它展开的----[模拟分页] 63 64 void Button1Click(object sender, EventArgs e) //自动填充数据 65 { 66 67 if(Y_data.Count<=0){ 68 for(int i=1;i<10001;i++){ 69 string str = String.Format("这是第{0}条数据。\r\n",i); 70 Y_data.Add(str); 71 } 72 Show_Data(); 73 } 74 } 75 76 void Button2Click(object sender, EventArgs e) //清除数据 77 { 78 if(Y_data.Count>=0){ 79 Y_data.Clear(); 80 Show_Data(); 81 richTextBox2.Text = ""; 82 } 83 } 84 85 void Show_Data(){ //将数据显示在左侧框里 86 87 StringBuilder sb = new StringBuilder(); 88 for(int i=0;i Y_data.Count){ 116 MessageBox.Show("您输入的页数大于了总记录数!","非法设置:"); 117 this.P_ageNum = 0; 118 return; 119 } 120 this.T_pages = Y_data.Count/this.P_ageNum; 121 if(Y_data.Count%this.P_ageNum != 0){ 122 this.T_pages++; 123 } 124 label1.Text = String.Format("共:({0})页",this.T_pages); 125 Current_page = 1; 126 SplitPages(); 127 } 128 129 void Button3Click(object sender, EventArgs e) //进行分页处理的程序 130 { 131 Button bn = sender as Button; //获取传递进来的Button属性 132 if(this.T_pages > 1){ //总页数只有大于1才有意义 133 switch(bn.Name){ 134 case "FirstPage": //首页 135 if(this.Current_page>1){ //只有当前页大于1时,才会返回首页,否则本身就在首页呢 136 this.Current_page = 1; //直接将当前页定位到1 137 SplitPages(); 138 } 139 break; 140 case "PreviousPage"://上一页 141 if(this.Current_page>1){ //只有当前页大于1时,上一页才有可能存在,否则本身就在首页呢 142 this.Current_page = this.Current_page-1; //往前翻一页 143 SplitPages(); 144 } 145 break; 146 case "NextPage": //下一页 147 if(this.Current_page+1 <= this.T_pages){ //只有当前页+1,不超出总页数时,才有意义 148 this.Current_page = this.Current_page+1; //往后翻一页 149 SplitPages(); 150 } 151 break; 152 case "LastPage": //尾页 153 if(this.Current_page 1){ 185 StartPage = (this.Current_page*this.P_ageNum)-this.P_ageNum; //计算起始页 186 EndPage = this.Current_page*this.P_ageNum; //计算结束页 187 188 if(EndPage>Y_data.Count){ //若索引边界超出了总记录数,明显不符合常理 189 EndPage = Y_data.Count; 190 } 191 } 192 for(int i=StartPage;i 希望此文能帮助到需要的朋友,当处理小数据量时,或许就可以自己编个分页控件耍耍。
本人能力确实有限,写不出太伟大、太高明的程序。欢迎各朋友给予批评指证,也欢迎与我探讨C#方面的技术。
Tags: 

延伸阅读

最新评论

发表评论