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

我想使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; 

我尝试了一些适合宽度的东西,但没有运气。 有什么建议?

谢谢。

这应该工作:

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

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

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

 var totalHeight = dataGridView2.Rows.GetRowsHeight(DataGridViewElementStates.None); var totalWidth = dataGridView2.Columns.GetColumnsWidth(DataGridViewElementStates.None); 

更完整的版本:

 dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2; dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2; 

您将需要使用DataGridViewRow集合和DataGridViewColumn集合的属性来执行此操作。

尝试类似于此处使用的方法:

如何在DataGridView中增加行大小

这有点晚了,在视觉基础上,但这对我有用,以防其他人找到这个post。 我在tableLayoutPanel中使用停靠的datagridview,它在调整窗体大小时自动resize。 它不缩小forms。 我只是开始小forms。 可以使用相同的技术添加行。

 Private Sub setFormWidth() Dim iTotalWidth As Integer = 0 '884 Dim iDisplayedWidth As Integer = 0 Dim r As Rectangle For Each c As DataGridViewColumn In dgv_EmpList.Columns If c.Visible Then iTotalWidth += c.Width r = dgv_EmpList.GetColumnDisplayRectangle(c.Index, True) iDisplayedWidth += r.Width End If Next Me.Width += (iTotalWidth - iDisplayedWidth) End Sub