C# 如何调整datagrid的大小

C# 如何调整datagrid的大小,c#,winforms,datagrid,C#,Winforms,Datagrid,我在winform中有一个datagridview,我想做两件事。调整datagrid的大小,以便根据datagrid大小显示所有列(无滚动)调整winform的宽度 尝试了下面的代码,但无效* int width = 0; foreach (DataGridViewColumn col in information.Columns) { width += col.Width; } width += information.RowHe

我在winform中有一个datagridview,我想做两件事。调整datagrid的大小,以便根据datagrid大小显示所有列(无滚动)调整winform的宽度

  • 尝试了下面的代码,但无效*

        int width = 0; 
        foreach (DataGridViewColumn col in information.Columns)
        {
            width += col.Width;
        }
    
        width += information.RowHeadersWidth;
    
        information.ClientSize = new Size(width + 100,height);
    

简单的操作顺序:

  • 将DataGridView的AutoSizeColumnMode属性设置为AllCells
  • 添加所有列的Width属性,以及控件上边框的额外宽度(可能加上2)
  • 将DataGridView的宽度属性设置为您计算的宽度
  • 将窗体的宽度设置为DataGridView的宽度 由你自己来编写代码

    编辑:我现在在一个编译器前面,所以我把它放在一起:

    进入VisualStudio。开始一个新项目。不要在设计器中的窗体上添加任何内容。只需在初始值设定项中使用此代码

    public Form1()
    {
        InitializeComponent();
    
        // Create a DataGridView with 5 Columns
        // Each column is going to sized at 100 pixels wide which is default
        // Once filled, we will resize the form to fit the control
        DataGridView dataGridView1 = new DataGridView();
        for (int i = 0; i < 5; i++)
        {
            DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
            dataGridView1.Columns.Add(col);
        }
        dataGridView1.Location = new Point(0, 0);
    
        // Add the DataGridView to the form
        this.Controls.Add(dataGridView1);
    
        // Step 2:
        // Figure out the width of the DataGridView columns
        int width = 0;
        foreach (DataGridViewColumn col in dataGridView1.Columns)
            width += col.Width;
        width += dataGridView1.RowHeadersWidth;
    
        // Step 3:
        // Change the width of the DataGridView to match the column widths
        // I add 2 pixels to account for the control's borders
        dataGridView1.Width = width + 2;
    
        // Step 4:
        // Now make the form's width equal to the conbtrol's width
        // I add 16 to account for the form's boarders
        this.Width = dataGridView1.Width + 16;
    }
    
    public Form1()
    {
    初始化组件();
    //创建一个包含5列的DataGridView
    //默认情况下,每列的大小为100像素宽
    //填充后,我们将调整窗体大小以适应控件
    DataGridView dataGridView1=新建DataGridView();
    对于(int i=0;i<5;i++)
    {
    DataGridViewTextBoxColumn=新DataGridViewTextBoxColumn();
    dataGridView1.Columns.Add(col);
    }
    dataGridView1.Location=新点(0,0);
    //将DataGridView添加到表单中
    this.Controls.Add(dataGridView1);
    //步骤2:
    //计算DataGridView列的宽度
    整数宽度=0;
    foreach(dataGridView1.Columns中的DataGridViewColumn列)
    宽度+=列宽度;
    宽度+=dataGridView1.RowHeadersWidth;
    //步骤3:
    //更改DataGridView的宽度以匹配列宽
    //我添加了2个像素来说明控件的边界
    dataGridView1.Width=宽度+2;
    //步骤4:
    //现在使窗体的宽度等于conbtrol的宽度
    //我加了16个来说明表格的寄宿生
    this.Width=dataGridView1.Width+16;
    }
    
    这段代码创建了一个包含五列的
    DataGridView
    ,然后完全按照您的要求调整控件和表单的大小。我按照上面概述的步骤操作(步骤1除外,因为我的列中没有任何数据)


    这个代码有效。因此,如果你的工作不正常,你肯定还有其他愚蠢的事情,我帮不了你。

    您好,我通过下面的代码找到了如何让它正常工作的方法。信息是数据网格,这是表单

           int width = 0;
    
            this.information.RowHeadersVisible = false;
            for (int i = 0; i < information.Columns.Count; i++)
                width += information.Columns[i].GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, true);
    
            int rows = 0;
    
            this.information.RowHeadersVisible = false;
            for (int i = 0; i < information.Rows.Count; i++)
                rows += information.Rows[i].GetPreferredHeight(i, DataGridViewAutoSizeRowMode.AllCells, true);
    
    
            information.Size = new Size(width +20, rows+50);
            this.Width = width + 50;
    
    int-width=0;
    this.information.RowHeadersVisible=false;
    对于(int i=0;i
    感谢您的快速响应,但我这样做了,它仍然没有显示int width=0的所有列;foreach(information.Columns中的DataGridViewColumn){width+=col.width;}width+=information.RowHeadersWidth;information.ClientSize=新尺寸(宽度+100,高度+100);它仍然不起作用。列是在运行时创建的,这是一个问题“它不工作”是什么意思?会发生什么?尺寸不变吗?你有没有设置断点?在尝试更改控件大小之前,是否确定宽度变量的宽度正确?我需要更多的信息,而不是“它不起作用”。对不起,我已经做了半个小时了。无论如何,大小从756变为846,但是仍然没有显示两列。您是否有为DataGridView标识的最大大小?这可能会阻止您根据需要调整其大小。另一个想法是在设置AutoSizeColumnMode后,强制DataGridView重新绘制自身。很可能当您获得列的宽度时,它们还没有调整大小。除此之外,我概述的步骤应该足以满足您的需求。我怀疑你还有什么奇怪的事。很抱歉,今晚我帮不了你什么忙-我在智能手机里,面前没有编译器。我在回答中添加了示例代码,这表明我告诉你的在一个简单的示例中是有效的。如果这对你有帮助,请记得投票并接受我的回答。