首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridView汽车高度-如何AutoSize DataGridView高度?

DataGridView汽车高度-如何AutoSize DataGridView高度?
EN

Stack Overflow用户
提问于 2016-08-07 16:53:48
回答 2查看 4.8K关注 0票数 3

我试图根据DataGridView AutoSize包含的行数来确定它的高度。目前,我能够通过以下几行实现这一点:

代码语言:javascript
复制
dataGridView_SearchResults.AutoSize = true;

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-07 17:28:48

选项1-覆盖GetPreferredSize

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

代码语言:javascript
复制
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和其他一些事件中设置自动高度:

代码语言:javascript
复制
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;
}

如果要确保网格中的所有更改(包括更改Font ),行高度将导致调整网格大小,则可以在Paint事件中调用该方法。

选项3-设置MaximumSize

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

代码语言:javascript
复制
dataGridView1.MaximumSize = new Size(this.dataGridView1.Width, 0);
dataGridView1.AutoSize = true;

Note

由于当用户希望让左、右锚改变网格宽度时,使用MaximumSize并不那么友好,所以我更喜欢使用选项1或选项2。

票数 5
EN

Stack Overflow用户

发布于 2020-11-24 20:06:28

我使用Reza Aghaei框架4.7.2尝试了.NET提出的每个选项。每次我在最后一行和DataGridView底部边框之间都有一个额外的空间。所以我尝试了一种不同的方法,它起作用了!使用您喜欢的事件,编写以下行:

代码语言:javascript
复制
dataGridView1.Height = DataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible)
   + (dataGridView1.ScrollBars.HasFlag(ScrollBars.Horizontal) ? SystemInformation.HorizontalScrollBarHeight : 0)
   + 3;

您将根据您选择的样式更改最后一个+3。只需根据您的喜好将其从+1改为+5即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38816425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档