使dataGridView大小适合行和列的总大小

ale*_*xxx 13 .net c# winforms

我想使dataGridView的大小适合列和行的总大小.关于总高度,我设法使它适合列的高度:

const int datagridLines = 30;
s.Height = dataGridView2.Columns[0].HeaderCell.Size.Height;
for (byte i = 0; i < datagridLines; i++)
{
  dataGridView2.Rows.Add();
  s.Height += dataGridView2.Rows[i].Height;
}
dataGridView2.ClientSize = s;
Run Code Online (Sandbox Code Playgroud)

我试过一些东西也适合宽度但没有运气.有什么建议?

谢谢.

Jay*_*ggs 19

这应该工作:

int height = 0;
foreach (DataGridViewRow row in dataGridView1.Rows) {
    height += row.Height;
}
height += dataGridView1.ColumnHeadersHeight;

int width = 0;
foreach (DataGridViewColumn col in dataGridView1.Columns) {
    width += col.Width;
}
width += dataGridView1.RowHeadersWidth;

dataGridView1.ClientSize = new Size(width + 2, height + 2);
Run Code Online (Sandbox Code Playgroud)

&widthheight值的+ 2 是一个软糖因子,用于说明DataGridView内部元素的宽度.我记得在某个地方看到代码可以让你在没有硬编码数字的情况下得到这个值,但我现在找不到它.


tic*_*cky 9

行和列集合的GetRowsHeight和GetColumnsWidth方法应该可以毫不费力地为您提供所需的内容:

var totalHeight = dataGridView2.Rows.GetRowsHeight(DataGridViewElementStates.None);
var totalWidth = dataGridView2.Columns.GetColumnsWidth(DataGridViewElementStates.None);
Run Code Online (Sandbox Code Playgroud)


小智 7

更完整的版本:

dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2;

dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2;
Run Code Online (Sandbox Code Playgroud)