2011-07-11 36 views
9

我有一个DataGridView与用户可定义数量的列(从〜6-60的任何地方)数值数据。网格中的数据量超过可以一次显示在屏幕上的数据量。我有一个与数据一致的图。我想保持两者同步,以便图上的特定时间T与网格中​​的相同时间垂直排列。以编程方式调整DataGridView的大小以删除滚动条

为此,我想使DGV足够宽以避免水平滚动条,使图形宽度相同,然后将滚动卸载到容器控件上。但是,我无法找到一种方法来直接获取设置DGV所需的宽度,以便从中删除滚动条。

回答

8

要防止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; 
} 
+0

垂直滚动条是不是一个问题,在我的情况,但不能被这种痛苦少比一个子类中加入了行的垂直高度和等,并检查对控制高度呢? –

+0

@丹,我相信我误解了你的问题。你想设置你的DGV的高度,所以它从不显示垂直滚动条? –

+0

不完全,我想它的宽度设置,所以它从不显示水平滚动条。 –

3

这会调整列宽以适应他们提供的空间,它会删除水平滚动条。

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 

这将调整列成为可能的最小宽度,仍然保持在细胞中的值可见,它会自动调整的datagridview以适应列,但如果形式不是可能会出现水平滚动条足够大。在这种情况下,你将不得不调整窗体的宽度。

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
+0

这也会导致可变宽度列,这是不可接受的,因为它们需要匹配图形水平比例的间距。 –

相关问题