Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将dataGridView大小调整到行';s和列';s总尺寸_C#_.net_Winforms - Fatal编程技术网

C# 将dataGridView大小调整到行';s和列';s总尺寸

C# 将dataGridView大小调整到行';s和列';s总尺寸,c#,.net,winforms,C#,.net,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

我想使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;
const int datagridLines=30;
s、 高度=dataGridView2.Columns[0].HeaderCell.Size.Height;
对于(字节i=0;i
我尝试了一些东西也适合宽度,但没有运气。有什么建议吗


谢谢。

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

尝试与本节中使用的方法类似的方法:

这应该可以:

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

width
height
值的+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;

虽然有点晚了,而且是用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

也谢谢你的回答,Mamta Dalal。是Padding属性贡献了+2偏移值吗?请参阅@TheBlastOne的接受答案-Padding属性设置单元格边缘与其内容之间的空间。我相信DataGridViewColumn.DividerWidth属性与此有关。与其自己进行计算,不如看看Ticky的答案:。工作起来很有魅力。这不包括页眉高度/宽度。您可以执行totalwidth+=dataGridView1.RowHeaderWidth;值得注意的是,这结合了ticcky和jay的优点,但您应该详细说明“2”。在这种情况下不起作用,尽管我有一个低效的方法,它可以在引用其他来源时使用块引号。另外,除非表单是无边框的,否则应该改用Me.ClientSize,因为这将排除边框(在不同的窗口版本中有不同的值)。