類似web風格的 Winform 分頁控件


背景

  最近做一個Winform的小程序,需要用到分頁,由於之前一直在用 TonyPagerForWinForm.dll ,但該庫沒有源代碼,網上找的也不全面,索性就准備自己改造一個。在園子里翻了一下,發現路過秋天在多年前寫了個分頁控件,Winform 通用分頁控件實戰篇(提供源碼下載)。站在大神的肩膀上就是快,一會就改好了。

效果圖

  功能比較齊全,不過樣式上,樓主十分喜歡easyUI或ext的列表分頁風格。於是換了幾個按鈕,添加了圖標,看看現在的效果。

  

  控件源碼在正文最下方。

使用簡介

  就那么一點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

  插點題外話,好久不做Winform,有些漸漸忘記了。這里說幾點。

  1.控件隨着窗口自適應,設置anchor屬性,有top left right down ,根據實際需要設置。

  2.Datagrid綁定數據,如果需要綁定特殊列,如圖片,下拉框,則首先指定列頭,接着循環創建行,單元格等。

                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隨着窗口最大化,自動調整列的寬度。

一行代碼:

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 = "標題";

分頁控件源代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM