繁体   English   中英

c#调整datagridview列的大小以适合控件

[英]c# resize datagridview columns to fit control

我有一个固定在Winform面板上的数据网格视图。 当我调整窗体的大小时,datagridview的大小将按预期调整,但是列的大小不会调整以适合datagridview。 相反,我剩下的是Datagridview的背景色。

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

谢谢。

您可以始终使用AutoSizeColumnsMode属性

此属性使您可以配置控件,以便自动调整列宽以填充控件或适合单元格内容。 每当控件的宽度发生变化时,都会在填充模式下进行尺寸调整。

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

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

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM