最近作一個Winform的小程序,須要用到分頁,因爲以前一直在用 TonyPagerForWinForm.dll ,但該庫沒有源代碼,網上找的也不全面,索性就準備本身改造一個。在園子裏翻了一下,發現路過秋天在多年前寫了個分頁控件,Winform 通用分頁控件實戰篇(提供源碼下載)。站在大神的肩膀上就是快,一會就改好了。html
功能比較齊全,不過樣式上,樓主十分喜歡easyUI或ext的列表分頁風格。因而換了幾個按鈕,添加了圖標,看看如今的效果。web
控件源碼在正文最下方。數據庫
就那麼一點web分頁的感受了。具體的用法,簡單的貼一貼,更詳細的能夠到秋天的博客裏看看,上面有連接。小程序
private void StartForm_Load(object sender, EventArgs e) { //建立文件數據庫表。 MDataTable.CreateSchema("Users.txt", false, new string[] { "UserName", "Password", "Enabled" }, SqlDbType.NVarChar, SqlDbType.NVarChar, SqlDbType.Bit); for (int i = 0; i < 200; i++)//插入200條數據。 { using (MAction action = new MAction("Users.txt", "Txt Path={0}")) { action.Set("UserName", "UserName_" + i); action.Set("Password", "Password_" + i); action.Set("Enabled", i%2==0); action.Insert(InsertOp.None); } } pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged); LoadData(); } void pagerControl1_OnPageChanged(object sender, EventArgs e) { LoadData(); } void LoadData() { int count; using (MAction action = new MAction("Users.txt", "Txt Path={0}")) { action.Select(pagerControl1.PageIndex, pagerControl1.PageSize, string.Empty, out count).Bind(gvUsers); pagerControl1.DrawControl(count); } }
插點題外話,很久不作Winform,有些漸漸忘記了。這裏說幾點。佈局
1.控件隨着窗口自適應,設置anchor屬性,有top left right down ,根據實際須要設置。post
2.Datagrid綁定數據,若是須要綁定特殊列,如圖片,下拉框,則首先指定列頭,接着循環建立行,單元格等。this
DataGridViewRow row = new DataGridViewRow(); DataGridViewTextBoxCell 編號 = new DataGridViewTextBoxCell(); 編號.Value = i++.ToString(); row.Cells.Add(編號); var state = reader["111"].ToString().AsInt(0); DataGridViewTextBoxCell OpenClose = new DataGridViewTextBoxCell(); OpenClose.Value = state > 0 ? "關閉" : "xxxxxx"; row.Cells.Add(OpenClose); var _dval = reader["222"].ToString().AsInt(0); DataGridViewTextBoxCell t1 = new DataGridViewTextBoxCell(); t1.Value = _dval; row.Cells.Add(t1); var _dmin = reader["333"].ToString().AsInt(0); DataGridViewTextBoxCell dmin = new DataGridViewTextBoxCell(); dmin.Value = _dmin; row.Cells.Add(dmin); //圖片列 DataGridViewImageCell t2 = new DataGridViewImageCell(); t2.Value = _dval > _dmin ? Properties.Resources.error : Properties.Resources.success; row.Cells.Add(t2); dataGridView1.Rows.Add(row);
3.DataGrid隨着窗口最大化,自動調整列的寬度。url
一行代碼: Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 這就搞定了,效果就是列寬會根據內容以及表頭寬度自行判斷,最後調整到合適的寬度。 AutoSizeMode這個屬性並不顯示在「屬性」窗口中。 若是你的DataGridView是動態綁定數據的, 那就只能在代碼中設置。 若是你的DataGridView列名是設計好的,那麼能夠在DataGridView上點擊右鍵,選擇「編輯列」,而後選中你要設置自適應的列,在它的屬性列表中的「佈局」選項卡里面選擇AutoSizeMode的類型。 AutoSizeMode屬性能夠設置的值還有很多: 成員名稱 說明 NotSet 列的大小調整行爲從DataGridView.AutoSizeColumnsMode 屬性繼承。 None 列寬不會自動調整。 AllCells 調整列寬,以適合該列中的全部單元格的內容,包括標題單元格。 AllCellsExceptHeader 調整列寬,以適合該列中的全部單元格的內容,不包括標題單元格。 DisplayedCells 調整列寬,以適合當前屏幕上顯示的行的列中的全部單元格的內容,包括標題單元格。 DisplayedCellsExceptHeader 調整列寬,以適合當前屏幕上顯示的行的列中的全部單元格的內容,不包括標題單元格。 ColumnHeader 調整列寬,以適合列標題單元格的內容。 Fill 調整列寬,使全部列的寬度正好填充控件的顯示區域,只須要水平滾動保證列寬在DataGridViewColumn.MinimumWidth屬性值以上。相對列寬由相對DataGridViewColumn.FillWeight屬性值決定。 另外介紹: DataGridView 有一個屬性是AutoSizeColumnMode,他有幾個枚舉值: 1、AllCells 調整列寬,以適合該列中的全部單元格的內容,包括標題單元格。 2、AllCellsExceptHeader 調整列寬,以適合該列中的全部單元格的內容,不包括標題單元格。 3、ColumnHeader 調整列寬,以適合列標題單元格的內容。 4、DisplayedCells 調整列寬,以適合當前屏幕上顯示的行的列中的全部單元格的內容,包括標題單元格。 5、DisplayedCellsExceptHeader 調整列寬,以適合當前屏幕上顯示的行的列中的全部單元格的內容,不包括標題單元格。 6、Fill 調整列寬,使全部列的寬度正好填充控件的顯示區域,只須要水平滾動保證列寬在DataGridViewColumn.MinimumWidth 屬性值以上。相對列寬由相對 DataGridViewColumn.FillWeight 屬性值決定。 7、None 列寬不會 自動調整。 8、NotSet 列的大小調整行爲從 DataGridView.AutoSizeColumnsMode 屬性繼承。 注:若是想要自動設置列寬.在這裏就必須把DataGridView的值設置爲Fill this.dataGridView.DataSource = ds.Tables[0]; this.dataGridView.Columns[0].FillWeight = 10; //第一列的相對寬度爲10% this.dataGridView.Columns[1].FillWeight = 20; //第二列的相對寬度爲20% this.dataGridView.Columns[2].FillWeight = 30; //第三列的相對寬度爲30% 這裏的值是相對於DataGridView當前的總寬度的,因此窗體最大化和縮小的效果是不同的,但比例不變 注:如何給每列設置標頭 設置標題字段(先把ColumnsHeadersVisible設置爲true) this.dataGridView.Columns[0].HeaderText = "編號"; this.dataGridView.Columns[1].HeaderText = "日期"; this.dataGridView.Columns[2].HeaderText = "標題";
分頁控件源代碼下載spa