2011-07-11 8 views
9

数値データのユーザー定義可能な列数(〜6〜60の任意の場所)を持つDataGridViewがあります。高い方では、グリッド内のデータ量が画面上に一度に表示できるデータ量を超えています。私はデータと一緒に行くグラフを持っています。グラフ上の特定の時間Tがグリッド内で同じ時間に垂直に並ぶように、2つを同期させておきたいと思います。プログラムでスクロールバーを削除するDataGridViewのサイズ変更

これを行うには、水平スクロールバーを避け、グラフの幅を均等にし、スクロールをコンテナコントロールにオフロードするのに十分なだけ広いDGVを作成したいと思います。しかし、スクロールバーを削除するには、DGVを設定するために必要な幅を直接取得する方法がありません。

答えて

8

DataGridViewが水平スクロールバーを表示しないようにするには、DGVの幅が列幅と行ヘッダーの幅を加えたもの以上であることを確認する必要があります。また、BorderStyleプロパティがNoneでない場合、コントロールの幅(および高さ)に追加される2つのピクセルを調整する必要があります。

/// <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

これは、彼らが提供しているスペースに合わせて列のサイズを変更し、それが水平スクロールバーを削除します:

は、ここで与えられたDataGridViewのために、この最小値を返します方法です。

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 

これは、可能な限り最小幅となり、まだ可視セルの値を維持するために列のサイズを変更し、自動的に列に合わせてDataGridViewのサイズを変更しますが、フォームがない場合は、水平スクロールバーが表示されることがあります十分に大きい。その場合は、フォームの幅を変更する必要があります。

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
+0

これは可変幅の列にもなりますが、これはグラフの水平スケールの間隔に合わせる必要があるため許容できません。 –

関連する問題