DataGridView
に3つの列があります。私がやろうとしているのは、最初の2列をコンテンツの幅に自動的に合わせ、3列目で残りのスペースを埋めることです。
WinFormsで行うことは可能ですか?使用している場合、EF DataContextからデータをロードしています。現在どのように見えるかのイメージを含めました。
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();
を呼び出す必要がありました。
これは私のお気に入りのアプローチです...
_dataGrid.DataBindingComplete += (o, _) =>
{
var dataGridView = o as DataGridView;
if (dataGridView != null)
{
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
};
コントロールのプロパティからプロパティを変更するだけですAutoSizeColumnsMode:Fill
またはコードで
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
テストされていませんが、試してみることができます。 テスト済みで動作しています。 AutoSizeMode
のDataGridViewColum
で遊んで、必要なものを達成できることを願っています。
設定してみてください
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;
これは動作するはずです
やってみて、
AutoSizeColumnMode = Fill;
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);
}
}