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

标签 c# winforms datagridview

我正在尝试根据它包含的行数使我的 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/

相关文章:

c# - 如何使用 Visual Studio Code 从 .NET Core 访问 Nuget 存储库

c# - ASP.NET MVC - 简单的 If Else

c# - 使用 c# 删除延迟时间 : System. Threading.Thread.Sleep(包含代码)

C# DataGridViewButtonColumn 和 CellContentClick 事件

c# - 如何设置 datagridview 中行/列标题单元格的背景颜色 - c# winform

visual-studio-2005 - DataGridView:滚动条不刷新

C# 标志问题

c# - 如何在 asp.net 中隐藏 Gridview 行值

.net - 通过远程桌面使用 .NET 桌面应用程序和 DevExpress

c# - 如何解决使用 C# 在 Windows 服务上捕获屏幕截图的问题?