首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridView AutoSize

DataGridView AutoSize
EN

Stack Overflow用户
提问于 2011-06-21 19:28:25
回答 7查看 36.8K关注 0票数 14

有没有办法让DataGridView适应列/行的宽度和高度?我找到了一个需要手动计算的解决方案:http://www.codeguru.com/csharp/.net/net_data/datagrid/article.php/c9603 DataGridView真的不支持这个功能吗?

EN

回答 7

Stack Overflow用户

发布于 2011-06-21 19:46:19

如果要根据数据自动调整所有列的大小,请执行以下操作:

代码语言:javascript
复制
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
    dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
票数 6
EN

Stack Overflow用户

发布于 2015-10-08 16:14:34

这是一个被误解的相当古老的问题。Idsa想要实现的是让实际的AutoSize winforms特性能够与DataGridView协同工作。该属性存在,但没有任何效果。

这意味着DataGridView必须适合其内容,而不是其内容必须适合DataGridView。

要实现AutoSize实现,有很多事情需要考虑。DataGridView的大小取决于很多条件:

  • 边框size
  • Padding
  • Cell分隔符大小
  • 行标题高度
  • 列标题宽度
  • DataGridView的填充方式(DataBound或Row更多

最好的方法是选择一组适合您特定场景的条件,并编写一些将为您计算DataGridView大小的内容。

以下是我的特定场景作为示例:

  • 我的网格是数据绑定的。因此,每次DataBinding操作完成时,其大小都会发生变化。这是触发重新计算DataGridView大小的条件。所以我把它挂接到DataBindingComplete事件上。
  • 我的网格不应该显示滚动条。因此,我将Scrollbars属性设置为None。将行和列的自动调整大小模式设置为AllCells.
  • Rows,并且
  • columns header不可见。如果是,则它们的大小必须包含在calculation.

下面的扩展方法符合我的需要。它非常简单,因为我的网格非常简单。您可能需要对其进行一些调整以使其按您所希望的方式工作,并且需要进行大量的工作才能使其适用于每种DataGridView场景。

代码语言:javascript
复制
public static void HandleAutoSize(this DataGridView dgv)
{
    dgv.DataBindingComplete += (s, e) =>
    {
        var dg = (DataGridView)s;
        var width = dg.Columns.GetColumnsWidth(DataGridViewElementStates.None);
        var height = dg.Rows.GetRowsHeight(DataGridViewElementStates.None);

        dg.ClientSize = new Size(width, height);
    };
}
票数 4
EN

Stack Overflow用户

发布于 2011-06-21 19:41:52

使用AutoSizeModeFill Mode

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6424514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档