以编程方式调整DataGridView的大小以删除滚动条

时间:2011-07-11 14:16:44

标签: c# winforms datagridview

我有一个DataGridView,其数据数据的用户可定义的列数(大约6到60之间)。在较高端,网格中的数据量超过可以一次显示在屏幕上的数据量。我有一个与数据一致的图表。我想保持两者同步,以便图表上的特定时间T在网格中垂直排列。

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

这将调整列的大小以适应它们提供的空间,它将删除水平滚动条。

dgv.AutoSizeColumnsMode  = DataGridViewAutoSizeColumnsMode.Fill;

这将调整列的大小以使其成为可能的最小宽度并仍保持单元格上的值可见,并且它将自动调整datagridview的大小以适应列,但如果表单不够大,则可能会出现水平滚动条。在这种情况下,您必须调整表单的宽度。

dgv.AutoSizeColumnsMode  = DataGridViewAutoSizeColumnsMode.AllCells;