C#自动将表单调整为DataGridView的大小

时间:2009-10-22 14:49:42

标签: c# forms datagridview resize

我有一个Form和一个DataGridView。我在运行时填充DataGridView,所以我想知道如何根据DataGridView的大小动态调整Form的大小?有什么样的财产或方法吗?或者我是否必须自己确定尺寸并相应更新?

8 个答案:

答案 0 :(得分:6)

您可以通过计数列宽度找到实际宽度。

不要忘记您的表单可能更复杂,您应该计算其他控件。

public class YourForm : Form
{
    public YourForm()
    {
        DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill};
        Controls.Add(_dgv);
    }
    public void CorrectWindowSize()
    {
        int width = WinObjFunctions.CountGridWidth(_dgv);
        ClientSize = new Size(width, ClientSize.Height);
    }
    DataGridView _dgv;
}

public static class WinObjFunctions
{
    public static int CountGridWidth(DataGridView dgv)
    {
        int width = 0;
        foreach (DataGridViewColumn column in dgv.Columns)
            if (column.Visible == true)
                width += column.Width;
        return width += 20;
    }
}

答案 1 :(得分:3)

通常,控件会根据包含表单的大小调整其大小。要将表单大小调整为DataGridView的大小, do 必须自己确定大小,然后将表单的大小设置为匹配,记住要考虑表单所需的额外大小菜单条和/或工具栏,状态栏或其他控件。

在您的情况下,最好不要调整表单大小以匹配网格视图控件。最有可能的是,网格视图中的行数可能比Windows屏幕上的行多得多,并且您不希望表单延伸到可查看的桌面区域下方。一般来说,这种情况正是您希望拥有可滚动网格视图的原因 - 用于查看一次可以容纳在屏幕上的更多数据。

答案 2 :(得分:2)

int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
this.Width = dgv_width;
this.Height = dgv_height;

this.Width调整此表单宽度。

当然你要添加固定值(例如margin,Form title heigth,ecc。)。 通过测试,我已经达到了适合我的价值观(不要问为什么......):

this.Width = dgv_width + 147;
this.Height = dgv_height + 47;

答案 3 :(得分:1)

我会转向另一个方向并将网格大小调整为表格。 (有些用户可能有低分辨率) 设置form =>的'WindowState'属性最大化。 (可选的) 设置DGV =>的'anchor'属性'上,下,左,右'。

答案 4 :(得分:1)

您可以使用PreferredSize属性(MSDN PreferredSize entry)。对于DataGridView控件,我发现首选的宽度和高度比我预期的大约20个单位。我猜控件可能会考虑滚动条来计算其首选大小。

我发现的另一个警告是,在添加或更改表格中的项目后,PreferredSize计算不会立即准确。为了解决这个问题,我为RowHeadersWidthChanged事件做了一个处理程序。

这对我有用:

class GridToy {
    private DataGridView grid;
    public GridToy(DataGridView dgv) {
        grid = dgv;
        grid.RowHeadersWidthChanged += AdjustWidth; // Event handler.
        Layout();
    }

    public void Layout() {
        // Just do some arbitrary manipulation of the grid.
        grid.TopLeftHeaderCell.Value = "Some Arbitrary Title";
    }

    public void AdjustWidth() {
        Control horizontal = grid.Controls[0]; // Horizontal scroll bar.
        Control vertical = grid.Controls[1]; // Vertical scroll bar.
        grid.Width = grid.PreferredSize.Width - vertical.Width + 1;
        grid.Height = grid.PreferredSize.Height - horizontal.Height + 1;
    }
}

答案 5 :(得分:0)

您可以设置属性"身高"在分类或使用ID之后在表单中自动,这应该这样做,

我刚尝试过..它有效了

#form1{
 background-color:white;
 height:auto;                             
 width:1500px;              
 border-top:medium solid #3399FF;
 margin-top:100px;
 margin-left:30px;
 display: inline-block;
 text-align: center;                
 float: none;      
}

我只是把我所做的完全放在你迷路的地方。不要为我的设计担心其他属性。

答案 6 :(得分:-1)

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

希望这会有所帮助:)

答案 7 :(得分:-1)

在网格属性中设置AutoSizeColumnsMode :Fill