调整DataGridView宽度以适合列

Jar*_*243 3 c# datagridview winforms

我有一个DataGridView以编程方式填充的.列设置为根据单元格内容自动调整大小.

DataGridView会提供关于液压和气动原理图部分的信息来填充.我的表单只有a SplitContainer,a PictureBox和the DataGridView.将SplitterDistance被链接到的宽度DataGridView.

DataGridView将仅具有最多6个列("索引","型号","序列号","图号","页号","修订号") ,并根据原理图要求至少2列的.所以我想相应地调整控件的大小.

如何让DataGridView控件调整为列的总宽度,以便滚动条不显示?

Gra*_*ICA 6

在网格加载数据并且相应地调整了列之后执行以下代码(假设您在运行时设置了列的AutoSize属性).

dataGridView1.Width =
    dataGridView1.Columns.Cast<DataGridViewColumn>().Sum(x => x.Width)
    + (dataGridView1.RowHeadersVisible ? dataGridView1.RowHeadersWidth : 0) + 3;
Run Code Online (Sandbox Code Playgroud)

它正在做什么:

  • 总计所有列的宽度(使用LINQ),
  • 看看"行标题"是否可见并添加了该宽度,如果是,
  • 添加3更多,因为没有它,水平滚动条一直显示 - 可能是因为网格周围的边距/填充,我不确定.

  • 如果需要,可以用`dataGridView1.Margin.Horizo​​ntal`替换`+ 3`; 并且可以使用`(new int [] {...).Min();`来限制像`Parent.Width`或`dataGridView1.Maximum.Width`之类的宽度来解决上面对@GrantWinney的关注 (2认同)
  • 要考虑隐藏列,请使用:`Columns.Cast&lt;DataGridViewColumn&gt;().Where(x =&gt; x.Visible).Sum(x =&gt; x.Width)` - 这不在原始问题中,但在其他问题中(像我一样)在这种情况下可能会尝试使用此代码。 (2认同)