在我的一个表单中,datagridview显示来自数据库的数据(当然,数据的数量(因此行数)可以改变)。数据库连接采用加载事件的形式。我只是想知道整个datagridview的高度是如何自动调整的,具体取决于它显示的行数。
答案 0 :(得分:9)
这是我设法找到的,到目前为止运行良好:
int GetDataGridViewHeight(DataGridView dataGridView)
{
var sum = (dataGridView.ColumnHeadersVisible ? dataGridView.ColumnHeadersHeight : 0) +
dataGridView.Rows.OfType<DataGridViewRow>().Where(r => r.Visible).Sum(r => r.Height);
return sum;
}
由于这个原因,我将DataGridView封装在UserControl中,因此我可以正确实现AutoSize:
// This is in a user control where the datagrid is inside (Top docked)
protected override void OnResize(EventArgs e)
{
if (AutoSize)
{
var height = this.GetDataGridViewHeight(this.dataBoxGridView);
this.dataBoxGridView.Height = height;
this.Height = height +this.Padding.Top + this.Padding.Bottom;
}
}
我没有尝试(还)直接从DataGridView构建自定义控件来实现它。
答案 1 :(得分:4)
如果设置DataGridView.AutoSize == true,那么当您添加更多行时,网格会变长。否则你会得到滚动条。除非你设置了ScrollBars == Null ||水平,在这种情况下,行刚刚消失。
出于某种原因,DataGridView.AutoSize只能以编程方式设置。当您将网格放入可自动调整的控件中时,可以观察到一些奇怪的行为。它似乎没有响应网格的大小。
我最终从列,行,标题,边距,填充和边框大小计算网格的预期大小,然后调整包含网格的控件的大小并在四边锚定网格。感觉很笨,但这是我能想到的最好的。如果你还在,评论,我会看看我是否能找到代码,我手边没有。
答案 2 :(得分:1)
MSDN说“此属性与此课程无关。”
答案 3 :(得分:0)
这就是我的表现。要设置DataGridView的高度,您可以使用其Set Height属性。在表单加载时,您可以使用此代码隐藏datagridview。 dataGridViewName.Height = 0;
然后从数据库中获取行。我们可以使用以下方法根据行数获取datagridview高度。
private int dataGridViewHeight()
{
int sum = this.dataGridViewName.ColumnHeadersHeight;
foreach (DataGridViewRow row in this.dataGridViewName.Rows)
sum += row.Height + 1; // I dont think the height property includes the cell border size, so + 1
return sum;
}