【问题标题】:Autosize and fit gridview columns自动调整和适合 gridview 列
【发布时间】:2022-08-17 03:45:57
【问题描述】:

我有一个包含一些文本框和网格视图的用户表单。我的网格视图包含 5 列,我想要的是自动调整前 4 列并使最后一列填充剩余的可用空间。我尝试将我的前 4 列设置为自动显示单元格、AllCells .. 如果前 4 列中的包含数据不超过列宽,则最后一个填充它工作正常,一旦它们超过最后一列就退出边界。 结果:

任何帮助都感激不尽

  • 到目前为止,您只是通过配置/设置进行大小调整吗?如果你有代码来做这些,我们需要看到它。
  • 尝试为最后一个Fill 列设置MinimumWidth 属性,以防止它在您显示的情况下完全消失。

标签: c# winforms gridview


【解决方案1】:

如果您只需要使所有列可见并且您不关心用“...”截断字符串,只需在代码中添加它(例如在表单的 Load 事件中或在网格视图):

foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}

另一方面,如果您想要完整的单元格字符串,您可以以编程方式减小单元格字体,这并不完全美观,但我给您留下一个代码作为示例(显然它必须与代码一起使用我在上面写过):

private void AdaptCellsToDataGrid()
{
    foreach (DataGridViewColumn column in dataGridView1.Columns)
    {
        column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    }

    foreach (DataGridViewColumn column in dataGridView1.Columns)
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            bool ContentTruncated = true;

            DataGridViewCell cell = dataGridView1.Rows[row.Index].Cells[column.Index];

            cell.Style.Font = dataGridView1.Font;
            Font currentCellFont = cell.Style.Font;
            float currentFontSize = currentCellFont.Size;
            float reduce = 1; //start with only 1 size reduction

            while (ContentTruncated == true)
            {
                Graphics graphics = this.CreateGraphics();

                //measuring the string lenght at drawing
                SizeF sizeF = graphics.MeasureString(cell.Value.ToString(), dataGridView1.Font);
                float textLength = sizeF.Width;

                if (textLength > cell.Size.Width)
                {
                    if ((currentFontSize - reduce) > 5) //if value is bigger than 5 reduce else stop reducing
                    {
                        cell.Style.Font = new Font(currentCellFont.FontFamily, (currentFontSize - reduce), currentCellFont.Style);
                        reduce = reduce + 1;
                    }
                    else
                    {
                        break;
                    }
                }
                else if (textLength <= cell.Size.Width)
                {
                    ContentTruncated = false;
                    break;
                }
            }
        }
    }
}

我希望我在某种程度上帮助了你。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2018-08-13
    相关资源
    最近更新 更多