【问题标题】:c# resize datagridview columns to fit controlc# 调整datagridview列的大小以适应控件
【发布时间】:2010-11-16 12:32:48
【问题描述】:

我有一个与 Winform 上的面板对接和锚定的 datagridview。当我调整表单大小时,datagridview 会按预期调整大小,但列不会调整大小以适应 datagridview。相反,我留下了 Datagridview 的背景颜色。

如何让列随控件一起增长?

谢谢。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    您始终可以使用AutoSizeColumnsMode 属性

    此属性允许您配置控件,以便自动调整列宽以填充控件或适合单元格内容。只要控件的宽度发生变化,就会在填充模式下进行大小调整。

    在 MSDN 页面上有更多关于此的信息。

    【讨论】:

      【解决方案2】:

      您可以将其中一列的AutoSizeMode 属性设置为Fill。然后此列将始终调整自身大小以填充其他列未使用的所有可用空间。

      【讨论】:

        【解决方案3】:
        private void dataGrid_SizeChanged(object sender, EventArgs e)
        {
            ResizeGridColumns();
        }
        
        private void ResizeGridColumns()
        {
            //get sum of non-resizable columns width
            int diffWidth = 0;
            foreach (DataGridViewColumn col in this.dataGrid.Columns)
            {
                if (col.Resizable == DataGridViewTriState.False && col.Visible) diffWidth += col.Width;
            }
        
            //calculate available width
            int totalResizableWith = this.dataGrid.Width - diffWidth;
        
            //resize column width based on previous proportions
            this.dataGrid.ColumnWidthChanged -= new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged);
            for (int i = 0; i < this.colWidthRaport.Count; i++)
            {
                try
                {
                    if (this.dataGrid.Columns[i].Resizable != DataGridViewTriState.False && this.dataGrid.Columns[i].Visible)
                    {
                        this.dataGrid.Columns[i].Width = (int)Math.Floor((decimal)totalResizableWith / this.colWidthRaport[i]);
                    }
                }
                catch { }
            }
            this.dataGrid.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged);
        }
        
        private void dataGrid_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
        {
            CalculateGridColWidthsRaport();
        }
        
        /// <summary>Calculates the proportions between grid width and column width</summary>
        private void CalculateGridColWidthsRaport()
        {
            //get sum of non-resizable columns width
            int diffWidth = 0;
            int colWidthsSum = 0;
            foreach (DataGridViewColumn col in this.dataGrid.Columns)
            {
                if (col.Visible)
                {
                    colWidthsSum += col.Width;
                    if (col.Resizable == DataGridViewTriState.False) diffWidth += col.Width;
                }
            }
            colWidthsSum += 24;
        
            //calculate available with
            int totalResizableWith = colWidthsSum - diffWidth;// this.dataGrid.Width - diffWidth;
            if (this.ParentForm.WindowState == FormWindowState.Maximized)
            {
                totalResizableWith = this.dataGrid.Width - diffWidth;
            }
        
            //calculate proportions of each column relative to the available width
            this.colWidthRaport = new List<decimal>();
            foreach (DataGridViewColumn col in this.dataGrid.Columns)
            {
                this.colWidthRaport.Add((decimal)totalResizableWith / (decimal)col.Width);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-01
          • 1970-01-01
          • 2016-07-02
          • 1970-01-01
          • 2020-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多