web-dev-qa-db-ja.com

DataGridViewの自動調整と塗りつぶし

DataGridViewに3つの列があります。私がやろうとしているのは、最初の2列をコンテンツの幅に自動的に合わせ、3列目で残りのスペースを埋めることです。

WinFormsで行うことは可能ですか?使用している場合、EF DataContextからデータをロードしています。現在どのように見えるかのイメージを含めました。

enter image description here

75
James Jeffery

DataGridViewColumn.AutoSizeMode プロパティを使用する必要があります。

これらの値のいずれかを列0および1に使用できます。

AllCells:列の幅は、ヘッダーセルを含む列のすべてのセルの内容に合わせて調整されます。
AllCellsExceptHeader:列の幅は、ヘッダーセルを除く列のすべ​​てのセルの内容に合わせて調整されます。
DisplayedCells:列の幅は、画面に現在表示されている行にある列のすべてのセルの内容に合わせて調整されます。 、ヘッダーセルを含む。
DisplayedCellsExceptHeader:現在画面に表示されている行にある列のすべてのセルの内容に合わせて列幅が調整されます、ヘッダーセルを除く。

次に、列2にFill値を使用します

すべての列の幅がコントロールの表示領域を正確に埋めるように列の幅が調整されます...

this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

他のユーザーから指摘されているように、デフォルト値は DataGridView.AutoSizeColumnsMode プロパティでdatagridviewレベルで設定できます。

this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

になり得る:

this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;

重要な注意:

グリッドがデータソースにバインドされ、列が自動生成される(AutoGenerateColumnsプロパティがTrueに設定される)場合、スタイルを適用するために DataBindingComplete イベントを使用する必要があります列が作成されました。


一部のシナリオ(たとえば、コードによってセルの値を変更する)では、グリッドを更新するためにDataGridView1.AutoResizeColumns();を呼び出す必要がありました。

142
Chris

これは私のお気に入りのアプローチです...

_dataGrid.DataBindingComplete += (o, _) =>
    {
        var dataGridView = o as DataGridView;
        if (dataGridView != null)
        {
           dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
           dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        }
    };
20
AlfredBr

コントロールのプロパティからプロパティを変更するだけですAutoSizeColumnsMode:Fill

またはコードで

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

8

テストされていませんが、試してみることができます。 テスト済みで動作しています。 AutoSizeModeDataGridViewColumで遊んで、必要なものを達成できることを願っています。

設定してみてください

dataGridView1.DataSource = yourdatasource;<--set datasource before you set AutoSizeMode

//Set the following properties after setting datasource
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

これは動作するはずです

4

やってみて、

 AutoSizeColumnMode = Fill;
0
Aki
public static void Fill(DataGridView dgv2)
   {
        try
        {
            dgv = dgv2;
            foreach (DataGridViewColumn GridCol in dgv.Columns)
            {
                for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++)
                {
                    GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                    GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                    GridCol.DataGridView.Columns[j].FillWeight = 1;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
0
Jay