[Winform]DataGridView列自适应宽度


在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属性,默认情况下是不会自适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的。

建一个用于测试的Person类

public class Person
    {
        [Description("姓名")]
        public string Name { get; set; }
        [Description("性别")]
        public string Gender { get; set; }
        [Description("地址")]
        public string Address { get; set; }
    }

winform绑定数据源,及自适应列宽代码

public partial class PersonInfoForm : Form
    {
        public PersonInfoForm()
        {
            InitializeComponent();
        }
        int width = 0;
        private void PersonInfoForm_Load(object sender, EventArgs e)
        {
            List<Person> list = new List<Person>() { 
            new Person(){Name="张三",Gender="",Address="北京市 海淀区 大钟寺"},
            new Person(){Name="李斯",Gender="",Address="上海市"},
            new Person(){Name="王二",Gender="",Address="河南省 郑州市 二七广场附近"},
            new Person(){Name="王二",Gender="",Address="河南省 郑州市 "},
            new Person(){Name="王二",Gender="",Address="河南省"}
            };
           //绑定数据源的做法和原来相同
            dgViewPersons.DataSource = list;
            //对于DataGridView的每一个列都调整
            for (int i = 0; i < this.dgViewPersons.Columns.Count; i++)
            {
                //将每一列都调整为自动适应模式
                this.dgViewPersons.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);
                //记录整个DataGridView的宽度
                width += this.dgViewPersons.Columns[i].Width;
            }
            //判断调整后的宽度与原来设定的宽度的关系,如果是调整后的宽度大于原来设定的宽度,
            //则将DataGridView的列自动调整模式设置为显示的列即可,
            //如果是小于原来设定的宽度,将模式改为填充。
            if (width > this.dgViewPersons.Size.Width)
            {
                this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
            }
            else
            {
                this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            }
            //冻结某列 从左开始 0,1,2
            dgViewPersons.Columns[1].Frozen = true;

        }
    }

主要用到了DataGridViewAutoSizeColumnMode枚举,也可以通过设置DataGridView的属性来实现

// 摘要: 
    //     定义用于指定如何调整列宽的值。
    public enum DataGridViewAutoSizeColumnMode
    {
        // 摘要: 
        //     列的大小调整行为从 System.Windows.Forms.DataGridView.AutoSizeColumnsMode 属性继承。
        NotSet = 0,
        //
        // 摘要: 
        //     列宽不会自动调整。
        None = 1,
        //
        // 摘要: 
        //     调整列宽,以适合列标题单元格的内容。
        ColumnHeader = 2,
        //
        // 摘要: 
        //     调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格。
        AllCellsExceptHeader = 4,
        //
        // 摘要: 
        //     调整列宽,以适合该列中的所有单元格的内容,包括标题单元格。
        AllCells = 6,
        //
        // 摘要: 
        //     调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格。
        DisplayedCellsExceptHeader = 8,
        //
        // 摘要: 
        //     调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格。
        DisplayedCells = 10,
        //
        // 摘要: 
        //     调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在 System.Windows.Forms.DataGridViewColumn.MinimumWidth
        //     属性值以上。 相对列宽由相对 System.Windows.Forms.DataGridViewColumn.FillWeight 属性值决定。
        Fill = 16,
    }

没设置自适应列宽的

 

使用自适应列宽的

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM