[Winform]DataGridView列自適應寬度


引言

在做winform項目中,數據控件DataGridView的使用多多少少是會用到的,如果不設置它的屬性,默認情況下是不會自適應寬度的,你想查看某項的數據,就不得不將標題欄拖來拖去,挺煩的。

方法

建一個用於測試的Person類

1     public class Person
2     {
3         [Description("姓名")]
4         public string Name { get; set; }
5         [Description("性別")]
6         public string Gender { get; set; }
7         [Description("地址")]
8         public string Address { get; set; }
9     }

winform綁定數據源,及自適應列寬代碼

 1   public partial class PersonInfoForm : Form
 2     {
 3         public PersonInfoForm()
 4         {
 5             InitializeComponent();
 6         }
 7         int width = 0;
 8         private void PersonInfoForm_Load(object sender, EventArgs e)
 9         {
10             List<Person> list = new List<Person>() { 
11             new Person(){Name="張三",Gender="",Address="北京市 海淀區 大鍾寺"},
12             new Person(){Name="李斯",Gender="",Address="上海市"},
13             new Person(){Name="王二",Gender="",Address="河南省 鄭州市 二七廣場附近"},
14             new Person(){Name="王二",Gender="",Address="河南省 鄭州市 "},
15             new Person(){Name="王二",Gender="",Address="河南省"}
16             };
17            //綁定數據源的做法和原來相同
18             dgViewPersons.DataSource = list;
19             //對於DataGridView的每一個列都調整
20             for (int i = 0; i < this.dgViewPersons.Columns.Count; i++)
21             {
22                 //將每一列都調整為自動適應模式
23                 this.dgViewPersons.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);
24                 //記錄整個DataGridView的寬度
25                 width += this.dgViewPersons.Columns[i].Width;
26             }
27             //判斷調整后的寬度與原來設定的寬度的關系,如果是調整后的寬度大於原來設定的寬度,
28             //則將DataGridView的列自動調整模式設置為顯示的列即可,
29             //如果是小於原來設定的寬度,將模式改為填充。
30             if (width > this.dgViewPersons.Size.Width)
31             {
32                 this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
33             }
34             else
35             {
36                 this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
37             }
38             //凍結某列 從左開始 0,1,2
39             dgViewPersons.Columns[1].Frozen = true;
40 
41         }
42     }

主要用到了DataGridViewAutoSizeColumnMode枚舉,也可以通過設置DataGridView的屬性來實現

 1  // 摘要: 
 2     //     定義用於指定如何調整列寬的值。
 3     public enum DataGridViewAutoSizeColumnMode
 4     {
 5         // 摘要: 
 6         //     列的大小調整行為從 System.Windows.Forms.DataGridView.AutoSizeColumnsMode 屬性繼承。
 7         NotSet = 0,
 8         //
 9         // 摘要: 
10         //     列寬不會自動調整。
11         None = 1,
12         //
13         // 摘要: 
14         //     調整列寬,以適合列標題單元格的內容。
15         ColumnHeader = 2,
16         //
17         // 摘要: 
18         //     調整列寬,以適合該列中的所有單元格的內容,不包括標題單元格。
19         AllCellsExceptHeader = 4,
20         //
21         // 摘要: 
22         //     調整列寬,以適合該列中的所有單元格的內容,包括標題單元格。
23         AllCells = 6,
24         //
25         // 摘要: 
26         //     調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,不包括標題單元格。
27         DisplayedCellsExceptHeader = 8,
28         //
29         // 摘要: 
30         //     調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,包括標題單元格。
31         DisplayedCells = 10,
32         //
33         // 摘要: 
34         //     調整列寬,使所有列的寬度正好填充控件的顯示區域,只需要水平滾動保證列寬在 System.Windows.Forms.DataGridViewColumn.MinimumWidth
35         //     屬性值以上。 相對列寬由相對 System.Windows.Forms.DataGridViewColumn.FillWeight 屬性值決定。
36         Fill = 16,
37     }

結果

沒設置自適應列寬的

使用自適應列寬的

總結

用到的東西很簡單,只是在項目中用到了,對winform使用較少,就研究上網查了一下,這樣可以提高用戶體驗,既然用到了就記錄一下,方便自己,也方便他人。

參考:

http://blog.csdn.net/ou_yangpengfei/article/details/6051701

其他網絡資源

 


免責聲明!

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



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