为什么DataGridView没有调整大小以适应行?

时间:2011-11-17 15:56:39

标签: .net winforms datagridview size

我正在尝试为自定义组合框创建一个下拉式无边框表单。下拉表单包含用户可以从中选择项目的网格。在大多数情况下,它的工作原理。但是,我注意到网格底部有空间,不包含任何数据。我已将AllowUserToAddRows设置为false。额外的空间甚至不包括细胞 - 它只是空白的控制空间。为了确保额外的空间在网格中(而不是表格),我将网格BackgroundColor设置为黄色并显示在表单中,所以我知道额外的空间在网格中。

注意:我正在以编程方式将网格添加到表单中。我不确定这是否重要。而且,我正在根据网格大小调整表单大小。表单宽度设置为网格宽度。如果网格包含10行以上,我将表单高度设置为仅显示10行,垂直滚动条允许用户滚动。如果网格包含少于10行,我将表单设置为完全适合这些行,并且不需要垂直滚动条。这听起来是否会影响网格尺寸?

我在表单的VisibleChanged事件中执行以下操作,以根据网格内容调整表单大小。请注意,这可能有打字错误,因为我从打印输出中重新输入了它。注意:MaxRowsToShow = 10。

int rowsHeight = _grid.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
int rowCount = _grid.Rows.GetRowCount(DataGridViewElementStates.Visible);
int rowHeight = _grid.RowTemplate.Height;
int rowsToShow = Math.Min(MaxRowsToShow, rowCount);
Height = rowsToShow * rowHeight + _grid.ColumnHeadersHeight;

更新 我取得了一些进展。我发现将DataGridView的ScrollBars属性设置为ScrollBars.Vertical会导致网格末尾的额外空间。如果我将ScrollBars设置为ScrollBars.None,当我有少于10个项目时,我看不到额外的空间。但是,当我有超过10个项目时,我仍然需要verticall滚动条,所以在这种情况下我仍然会看到额外的空间。但是,至少我找出了问题的根源。有谁知道为什么ScrollBars属性导致这种奇怪的行为。

2 个答案:

答案 0 :(得分:0)

您是否尝试过属性:

VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"

答案 1 :(得分:0)

您基本上是否拥有与网格尺寸相同的用户控件或表单?

如果是这样,请设置表单的大小。任何使用它的控件都可以根据需要调整大小,但它有一个布局大小。然后在窗体上放置一个容器控件,并将容器(例如面板)设置为Dock - >填。然后将网格放在该容器上并将其设置为Dock - >填。然后停止尝试设置网格的高度和东西。它将拥有容器允许的任何空间。

Winforms意味着让控件继承父母的宽度和高度,并调整大小以适应它们;通过重置表单以匹配网格,它有点倒退。用户(或程序)应调整表单大小,网格将随之大小。

如果网格不占用整个表单,则可以拆分容器并将网格锚点设置为顶部/左侧/右侧(用于顶部填充),而不是设置Dock属性。