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