• [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

    其他网络资源

  • 相关阅读:
    UE如何区分PDSCH中传输的DCCH和DTCH呢?
    LTE RLC 子层
    LTE的两篇微文
    TD-LTE中S1接口不支持的功能有哪些
    LTE系统消息SIB
    【转载】LTE – TTI Bundling技术
    关于lte上行闭环功控,下面哪个信道不能进行闭环功控
    lte每个小区有多少个可用的随机接入前导码
    LTE的物理小区标识(PCI)
    (转)MVC一个页面多个submit
  • 原文地址:https://www.cnblogs.com/jameslif/p/4086535.html
Copyright © 2020-2023  润新知