gpt4 book ai didi

c# - DataGridView 自动高度 - 如何自动调整 DataGridView 高度?

转载 作者:行者123 更新时间:2023-12-05 01:45:59 28 4
gpt4 key购买 nike

我正在尝试根据它包含的行数使我的 DataGridView 的高度自动调整。目前,我能够通过以下行完成此操作:

dataGridView_SearchResults.AutoSize = true;

然而,这会使水平滚动条消失,DataGridView 被切断。

如何在不丢失水平滚动条的情况下自动调整高度?

最佳答案

选项 1 - 覆盖 GetPreferredSize

您可以覆盖 GetPreferredSize DataGridView 的方法,并使用新提议的大小 new Size(this.Width, proposedSize.Height) 调用基本方法。这样,控件的当前宽度将保持不变,而自动调整大小规则将应用于其高度:

using System.Drawing;
using System.Windows.Forms;
public class MyDataGridView : DataGridView
{
public override Size GetPreferredSize(Size proposedSize)
{
return base.GetPreferredSize(new Size(this.Width, proposedSize.Height));
}
}

选项 2 - 根据计算的自动调整大小的高度设置高度

如果您不想从 DataGridView 派生,您可以通过调用其 GetPreferredSize 传递 new Size(0, 0) 来计算自动大小 然后将 DataGridView 的高度设置为结果的高度,这样你只改变了 DataGridView 的高度。您应该在 RowsAddedRowsRemoved 和其他一些事件中设置自动高度:

void AutoHeightGrid(DataGridView grid)
{
var proposedSize = grid.GetPreferredSize(new Size(0, 0));
grid.Height = proposedSize.Height;
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.RowsAdded += (obj, arg) => AutoHeightGrid(dataGridView1);
dataGridView1.RowsRemoved += (obj, arg) => AutoHeightGrid(dataGridView1);
//Set data source
//dataGridView1.DataSource = something;
}

如果要确保网格中的所有更改包括更改字体、行高都会导致调整网格大小,您可以在Paint 事件中调用该方法。

选项 3 - 设置 MaximumSize

另外正如 Hans 所提到的,如果您不想从 DataGridView 派生,您可以使用网格的 MaximumSize 属性。您可以将其设置为 new Size(this.dataGridView1.Width, 0):

dataGridView1.MaximumSize = new Size(this.dataGridView1.Width, 0);
dataGridView1.AutoSize = true;

注意

由于使用MaximumSize在用户想让网格宽度通过左右 anchor 变化时不太友好,所以我更喜欢使用选项1选项 2

关于c# - DataGridView 自动高度 - 如何自动调整 DataGridView 高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38816425/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com