1. ホーム
  2. c#

[解決済み] DataGridViewコントロールの列のサイズを自動的に変更し、かつ、ユーザーが同じグリッドの列のサイズを変更できるようにするにはどうしたらよいですか?

2022-08-09 19:38:01

質問

Windowsフォーム(WPFではなくC#2.0)上のDataGridViewコントロールにデータを入力しています。

私の目標は、セルで利用可能なすべての幅をきちんと埋めるグリッドを表示することです。つまり、右下に未使用(濃いグレー)の領域がなく、各列はそれが含むデータに従って適切にサイズ調整されます。 しかし また、ユーザーが好きなように列のサイズを変更できるようにすることです。

私はこれを実現するために、各カラムのAutoSizeModeを DataGridViewAutoSizeColumnMode.AllCellsに設定することで、これを実現しようとしています。 に設定された列の1つを除いて、私は DataGridViewAutoSizeColumnMode.Fillに設定しました。 グリッドの全領域がきちんとデータで満たされることを確実にするために。(私は、ユーザーがこの列のサイズを変更しようとすると、水平方向のスペースが常に使用されることを保証するサイズにスプリングバックすることを気にしません)。

しかし、私が言及したように、いったんロードされると、ユーザーが自分の要件に合わせて列のサイズを変更できるようにしたいと思います。各列にこれらの AutoSizeMode 値を設定すると、ユーザーはそれらの列のサイズを変更できなくなるようです。

すべての列の AutoSizeMode を設定しないようにして、サイズ変更を可能にしましたが、セルが含むデータに従って初期サイズを設定しません。データを読み込んだ後、グリッドの AutoSizeMode を "Not Set" に戻すと、同じ結果が発生します。

デフォルトの列幅の自動設定とユーザーによるサイズ変更を可能にする、私が見逃している設定はありますか、それとも DataGridView コントロールに入力するときに使用しなければならない別のテクニックがありますか。

どのように解決するのですか?

このトリックは私のために動作します。

    grd.DataSource = DT;

    // Set your desired AutoSize Mode:
    grd.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
    grd.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
    grd.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

    // Now that DataGridView has calculated it's Widths; we can now store each column Width values.
    for (int i = 0; i <= grd.Columns.Count - 1; i++)
    {
        // Store Auto Sized Widths:
        int colw = grd.Columns[i].Width;

        // Remove AutoSizing:
        grd.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;

        // Set Width to calculated AutoSize value:
        grd.Columns[i].Width = colw;
    }

上のコードで 列のAutoSizeプロパティを必要なAutoSizeModeに設定します。 次に、(列ごとに)各列の幅の値(AutoSizeの値から)を格納します。 AutoSizeプロパティを無効にし、最後に、列の幅を以前に格納した幅の値に設定します。