私のフォームの1つで、datagridviewはデータベースからのデータを表示します(もちろん、データの数(行数)は変更できます)。データベース接続は、ロード イベントの形式です。表示される行数に応じて、データグリッドビュー全体の高さがどのように自動調整されるかわかりません。
4 に答える
これは私が見つけたもので、これまでのところ問題なく動作します:
int GetDataGridViewHeight(DataGridView dataGridView)
{
var sum = (dataGridView.ColumnHeadersVisible ? dataGridView.ColumnHeadersHeight : 0) +
dataGridView.Rows.OfType<DataGridViewRow>().Where(r => r.Visible).Sum(r => r.Height);
return sum;
}
このおかげで、AutoSize を正しく実装できるように、DataGridView を UserControl にカプセル化しました。
// This is in a user control where the datagrid is inside (Top docked)
protected override void OnResize(EventArgs e)
{
if (AutoSize)
{
var height = this.GetDataGridViewHeight(this.dataBoxGridView);
this.dataBoxGridView.Height = height;
this.Height = height +this.Padding.Top + this.Padding.Bottom;
}
}
これを実装するために、DataGridView からカスタム コントロールを直接構築することは (まだ) 試みていません。
DataGridView.AutoSize == true を設定すると、行を追加するとグリッドが長くなります。そうしないと、スクロールバーが表示されます。ScrollBars == Null || を設定していない限り 水平方向。この場合、行は端から消えます。
何らかの理由で、DataGridView.AutoSize はプログラムでしか設定できません。また、自動サイズ変更可能なコントロール内にグリッドを配置すると、奇妙な動作が見られます。グリッドのサイズに反応していないようです。
列、行、ヘッダー、マージン、パディング、境界線のサイズからグリッドの予想サイズを計算し、グリッドを含むコントロールのサイズを変更し、グリッドを 4 つの側面に固定しました。本当に不格好に感じましたが、それは私が思いつくことができる最高のものです. まだ手元にない場合は、コメントしてください。コードが見つかるかどうかを確認します。
MSDN は、「このプロパティは、このクラスには関係ありません」と言っています。