8

限られた数の行を表示するがありDataGridViewますが、5 行を超えることはありません。これDataGridViewはコントロールに配置されるDataRepeaterため、通常は画面に何度も表示されます。私が達成したいのは、すべてのグリッドがコンテンツのサイズに合わせてサイズ変更されるため、4 つまたは 5 つのアイテムが含まれている場合はスクロール バーが表示されず、1 つまたは 2 つのアイテムしかない場合は余分な垂直スペースを占有しないことです。

グリッドにはテキスト データのみが含まれます。DataBindingCompleteそれらはデータ バインドされたコントロールであるため、基になるデータ ソースが変更された場合はサイズを変更する必要があります (イベントが適していると思います)。

どうすればこれを達成できますか? 行を数えることは最良の選択肢ですか? 前もって感謝します。

4

3 に答える 3

19

あなたのコントロールはデータ バインドされているため、イベントHeightで DataGridView のプロパティを行の高さの合計 (およびマージン) に設定します。DataBindingComplete

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    var height = 40;
    foreach (DataGridViewRow dr in dataGridView1.Rows) {
        height += dr.Height;
    }

    dataGridView1.Height = height;
}
于 2012-07-26T13:14:23.793 に答える
1

私は hmqcnoesy の答えを取り、それを拡張し、幅も含める関数を作成しました。また、任意のグリッドで使用できます。

注: グリッドで AutoSizeCells = AllCells を設定します。

    public static DataGridView SetGridHeightWidth(DataGridView grd, int maxHeight, int maxWidth)
    {
        var height = 40;
        foreach (DataGridViewRow row in grd.Rows)
        {
            if(row.Visible)
                height += row.Height;
        }

        if (height > maxHeight)
            height = maxHeight;

        grd.Height = height;

        var width = 60;
        foreach (DataGridViewColumn col in grd.Columns)
        {
            if (col.Visible)
                width += col.Width;
        }

        if (width > maxWidth)
            width = maxWidth;

        grd.Width = width;

        return grd;
    }
于 2016-12-06T19:54:03.680 に答える
0

この値は何でもかまいません。高さを設定するのに最適な値を見つけるために、グリッドでテストする必要があります。

var height = 40;

編集:

高さの実際の値を見つけるには、 grid の場所header の高さを追加する必要があります。そんな感じ。

int height = dgv.Location.Y + dgv.ColumnHeadersHeight;
foreach (DataGridViewRow dr in dgv.Rows) {
   height += dr.Height; // Row height.
}
dgv.Height = height;
于 2013-03-12T17:52:22.000 に答える