我有一个DataGridView与用户可定义数量的列(从〜6-60的任何地方)数值数据。网格中的数据量超过可以一次显示在屏幕上的数据量。我有一个与数据一致的图。我想保持两者同步,以便图上的特定时间T与网格中的相同时间垂直排列。以编程方式调整DataGridView的大小以删除滚动条
为此,我想使DGV足够宽以避免水平滚动条,使图形宽度相同,然后将滚动卸载到容器控件上。但是,我无法找到一种方法来直接获取设置DGV所需的宽度,以便从中删除滚动条。
我有一个DataGridView与用户可定义数量的列(从〜6-60的任何地方)数值数据。网格中的数据量超过可以一次显示在屏幕上的数据量。我有一个与数据一致的图。我想保持两者同步,以便图上的特定时间T与网格中的相同时间垂直排列。以编程方式调整DataGridView的大小以删除滚动条
为此,我想使DGV足够宽以避免水平滚动条,使图形宽度相同,然后将滚动卸载到容器控件上。但是,我无法找到一种方法来直接获取设置DGV所需的宽度,以便从中删除滚动条。
要防止DataGridView显示其水平滚动条,您需要确保DGV的宽度不小于其列的宽度加上行头的宽度。当BorderStyle
属性不是None
时,您还需要调整添加到控件宽度(和高度)的两个像素。
这里的,这将对于给定的DataGridView返回这个最低值的方法:
/// <summary>
/// Return the minimum width in pixels a DataGridView can be before the control's vertical scrollbar would be displayed.
/// </summary>
private int GetDgvMinWidth(DataGridView dgv) {
// Add two pixels for the border for BorderStyles other than None.
var controlBorderWidth = (dgv.BorderStyle == BorderStyle.None) ? 0 : 2;
// Return the width of all columns plus the row header, and adjusted for the DGV's BorderStyle.
return dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) + dgv.RowHeadersWidth + controlBorderWidth;
}
这会调整列宽以适应他们提供的空间,它会删除水平滚动条。
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
这将调整列成为可能的最小宽度,仍然保持在细胞中的值可见,它会自动调整的datagridview以适应列,但如果形式不是可能会出现水平滚动条足够大。在这种情况下,你将不得不调整窗体的宽度。
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
这也会导致可变宽度列,这是不可接受的,因为它们需要匹配图形水平比例的间距。 –
垂直滚动条是不是一个问题,在我的情况,但不能被这种痛苦少比一个子类中加入了行的垂直高度和等,并检查对控制高度呢? –
@丹,我相信我误解了你的问题。你想设置你的DGV的高度,所以它从不显示垂直滚动条? –
不完全,我想它的宽度设置,所以它从不显示水平滚动条。 –