1 #region 分页功能变量和控件 2 private int mCurrent; //当前记录行 3 private int mMax; //总记录数 4 private int mPageCount; //页数=总记录数/每页显示行数 5 private int mPageCurrent; //当前页号 6 private int mPageSize; //每页显示行数 7 8 private System.Windows.Forms.ToolStripButton btnFirstPage; 9 private System.Windows.Forms.ToolStripButton btnPrePage; 10 private System.Windows.Forms.ToolStripTextBox txtCurrentPage; 11 private System.Windows.Forms.ToolStripLabel lblPageCount; 12 private System.Windows.Forms.ToolStripButton btnNextPage; 13 private System.Windows.Forms.ToolStripButton btnLastPage; 14 private System.Windows.Forms.BindingNavigator dataNavigator; 15 #endregion 16 17 18 #region 分页控制相关函数 19 20 /// <summary> 21 /// 导航器初始化 22 /// </summary> 23 private void InitDataSet() 24 { 25 try 26 { 27 mPageSize = 15; 28 mMax = dt.Rows.Count; 29 mPageCount = mMax / mPageSize; 30 if ((mMax % mPageSize) > 0) 31 mPageCount++; 32 mPageCurrent = 1; 33 mCurrent = 0; 34 txtCurrentPage.Text = mPageCurrent.ToString(); 35 lblPageCount.Text = "/" + mPageCount.ToString(); 36 37 SetNavigatorState(); 38 LoadData(); 39 } 40 catch 41 { 42 } 43 } 44 45 /// <summary> 46 /// 加载 47 /// </summary> 48 private void LoadData() 49 { 50 int nStartPos = 0; 51 int nEndPos = mMax; 52 DataTable dtTemp = dt.Clone(); 53 if (mPageCurrent == mPageCount) 54 { 55 nEndPos = mMax; 56 } 57 else 58 { 59 nEndPos = mPageSize * mPageCurrent; 60 } 61 nStartPos = mCurrent; 62 for (int i = nStartPos; i < nEndPos; i++) 63 { 64 dtTemp.ImportRow(dt.Rows[i]); 65 mCurrent++; 66 } 67 //gridControl1.DataSource = null; 68 //gridControl1.DataSource = dtTemp; 69 BindingSource binding = new BindingSource(); 70 binding.DataSource = dtTemp; 71 this.gridControl1.DataSource = binding; 72 TreeOperation.SetGridViewStyle(this.gridView1); 73 74 } 75 76 /// <summary> 77 /// 控制导航器状态 78 /// </summary> 79 private void SetNavigatorState() 80 { 81 if (mPageCount > 1) 82 { 83 if (mPageCurrent == 1) 84 { 85 this.btnFirstPage.Enabled = false; 86 this.btnPrePage.Enabled = false; 87 this.btnNextPage.Enabled = true; 88 this.btnLastPage.Enabled = true; 89 } 90 else if (mPageCurrent == mPageCount) 91 { 92 this.btnFirstPage.Enabled = true; 93 this.btnPrePage.Enabled = true; 94 this.btnNextPage.Enabled = false; 95 this.btnLastPage.Enabled = false; 96 } 97 else 98 { 99 this.btnFirstPage.Enabled = true; 100 this.btnPrePage.Enabled = true; 101 this.btnNextPage.Enabled = true; 102 this.btnLastPage.Enabled = true; 103 } 104 } 105 else if (mPageCount <= 1) 106 { 107 this.btnFirstPage.Enabled = false; 108 this.btnPrePage.Enabled = false; 109 this.btnNextPage.Enabled = false; 110 this.btnLastPage.Enabled = false; 111 } 112 } 113 114 /// <summary> 115 /// 页面计算 116 /// </summary> 117 /// <param name="sender"></param> 118 /// <param name="e"></param> 119 private void dataNavigator_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 120 { 121 switch (e.ClickedItem.Name) 122 { 123 case "btnFirstPage": 124 mPageCurrent = 1; 125 mCurrent = mPageSize * (mPageCurrent - 1); 126 LoadData(); 127 txtCurrentPage.Text = mPageCurrent.ToString(); 128 lblPageCount.Text = "/" + mPageCount.ToString(); 129 this.SetNavigatorState(); 130 break; 131 case "btnNextPage": 132 mPageCurrent++; 133 mCurrent = mPageSize * (mPageCurrent - 1); 134 LoadData(); 135 txtCurrentPage.Text = mPageCurrent.ToString(); 136 lblPageCount.Text = "/" + mPageCount.ToString(); 137 this.SetNavigatorState(); 138 break; 139 case "btnPrePage": 140 mPageCurrent--; 141 mCurrent = mPageSize * (mPageCurrent - 1); 142 LoadData(); 143 txtCurrentPage.Text = mPageCurrent.ToString(); 144 lblPageCount.Text = "/" + mPageCount.ToString(); 145 this.SetNavigatorState(); 146 break; 147 case "btnLastPage": 148 mPageCurrent = mPageCount; 149 mCurrent = mPageSize * (mPageCurrent - 1); 150 LoadData(); 151 txtCurrentPage.Text = mPageCurrent.ToString(); 152 lblPageCount.Text = "/" + mPageCount.ToString(); 153 this.SetNavigatorState(); 154 break; 155 default: 156 return; 157 158 } 159 } 160 #endregion 161 public static void SetGridViewStyle(GridView view) 162 { 163 view.OptionsBehavior.Editable = false; 164 view.OptionsView.RowAutoHeight = true; 165 166 for (int i = 0; i < view.Columns.Count; i++) 167 { 168 view.Columns[i].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; 169 view.Columns[i].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; 170 } 171 }
借鉴此实现了Flexcell的分页显示。
都是先把全部数据集合查出来,再构造临时显示的集合。因为表格的结构比较复杂,用到了虚表模式。