私の質問は非常に単純です-データバインディングの後、水平スクロールにならないようにすべての列幅を設定したいと思います。このようなもの:
columnWidth = grid.width/grid.Columns.Count
しかし、この式は、現在の行を表示する行を選択できる「gridView の左側の部分」を考慮していません。その幅をどのように計算できますか?[(grid.width - X)/grid.Columns.Count]
私の質問は非常に単純です-データバインディングの後、水平スクロールにならないようにすべての列幅を設定したいと思います。このようなもの:
columnWidth = grid.width/grid.Columns.Count
しかし、この式は、現在の行を表示する行を選択できる「gridView の左側の部分」を考慮していません。その幅をどのように計算できますか?[(grid.width - X)/grid.Columns.Count]
これを行うのは非常に簡単です。DataGridView.AutoSizeColumnModeプロパティを に設定するだけFill
です。
grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
また、列間隔のサイズを変更するようにグリッドに明示的に要求する必要がある場合があります。よく覚えていません。しかし、それは簡単です:
grid.AutoResizeColumns();
documentationによるとFill
、次のことを行います。
列幅は、すべての列の幅がコントロールの表示領域を正確に埋めるように調整されます。水平スクロールは、列幅を DataGridViewColumn.MinimumWidth プロパティ値よりも大きく維持するためだけに必要です。相対的な列幅は、相対的な DataGridViewColumn.FillWeight プロパティ値によって決定されます。
したがって、基本的に、それを妨げる列がない限りMinimumWidth
、このプロパティはまさにあなたが探しているものを実行します。
編集:OPのコメントへの対処:
その情報を報告する単純なプロパティをいつでも作成できます。何かのようなもの...
public int DataGridViewDeadSpaceWidth
{
get
{
int x = grid.Width;
foreach (DataGridViewColumn column in grid.Columns)
x -= column.Width;
return x;
}
}
これを使用して から継承しDataGridView
、プロパティを自分でコントロールに追加することもできます。DataGridView
考慮しなければならない、 の境界からのデッド スペースがおそらく他にもあることに注意してください。