fit dataGridView的大小为行和列的总大小

本文关键字:小为 dataGridView fit | 更新日期: 2023-09-27 18:08:26

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

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

谢谢。

fit dataGridView的大小为行和列的总大小

应该可以:

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内部元素的宽度。我记得在某个地方看到过代码,可以让您在没有硬编码数字的情况下获得此值,但我现在找不到它。

Rows和Columns集合的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中增加行大小

这有点晚了,而且在visual basic中,但这对我来说是可行的其他人发现了这条线索。我在一个tableLayoutPanel中使用一个停靠的datagridview,它在窗体调整大小时自动调整大小。它不会缩小形状。我刚开始的时候,表格很小。可以使用相同的技术添加行。

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