10

私のフォームの1つで、datagridviewはデータベースからのデータを表示します(もちろん、データの数(行数)は変更できます)。データベース接続は、ロード イベントの形式です。表示される行数に応じて、データグリッドビュー全体の高さがどのように自動調整されるかわかりません。

4

4 に答える 4

9

これは私が見つけたもので、これまでのところ問題なく動作します:

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 からカスタム コントロールを直接構築することは (まだ) 試みていません。

于 2013-02-06T12:45:54.883 に答える
4

DataGridView.AutoSize == true を設定すると、行を追加するとグリッドが長くなります。そうしないと、スクロールバーが表示されます。ScrollBars == Null || を設定していない限り 水平方向。この場合、行は端から消えます。

何らかの理由で、DataGridView.AutoSize はプログラムでしか設定できません。また、自動サイズ変更可能なコントロール内にグリッドを配置すると、奇妙な動作が見られます。グリッドのサイズに反応していないようです。

列、行、ヘッダー、マージン、パディング、境界線のサイズからグリッドの予想サイズを計算し、グリッドを含むコントロールのサイズを変更し、グリッドを 4 つの側面に固定しました。本当に不格好に感じましたが、それは私が思いつくことができる最高のものです. まだ手元にない場合は、コメントしてください。コードが見つかるかどうかを確認します。

于 2010-04-27T04:38:58.820 に答える
1

MSDN は、「このプロパティは、このクラスには関係ありません」と言っています。

MSDN: DataGridView.AutoSize プロパティ

于 2011-12-01T10:03:13.680 に答える