0

「ビルド」と「公開」の 2 つの列のチェック ボックスがあります。各ヘッダーに「Build [ ]」と「Publish [ ]」を表示する必要があります。ここで、[ ] は、ユーザーがそれぞれの列のすべてのチェック ボックスを選択または選択解除できるようにするチェック ボックスです。優先度:新しいクラスを作成したり、画像を追加したりせずにこれを達成するにはどうすればよいですか? 最後の手段:これが不可能な場合は、適切なクラスを構築する方法を教えてもらえますか? 前もって感謝します!

4

1 に答える 1

1

2 つのレギュラーCheckBoxesを使用して、それらを に追加できますDataGridView

cbx_Build.Parent = dataGridView1;
cbx_Build.Location = new Point(0, 3);
cbx_Build.BackColor = SystemColors.Window;
cbx_Build.AutoSize = false;

cbx_Publish.Parent = dataGridView1;
cbx_Publish.Location = new Point(0, 3);
cbx_Publish.BackColor = SystemColors.Window;    
cbx_Publish.AutoSize = false;

それらを ColumnHeaders に配置したままにするには、次のようなコードを使用します。

dataGridView1.CellPainting += dataGridView1_CellPainting;  


void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
  if (e.ColumnIndex == BuildIndex && e.RowIndex == 0) cbx_Build.Left = e.CellBounds.Left;
  if (e.ColumnIndex == PubIndex && e.RowIndex == 0) cbx_Publish.Left = e.CellBounds.Left;
}

必要に応じて、列とオフセットに合わせて適切なインデックスを使用して、それらをもう少し右側に配置します。

Validatingイベントなどで、通常どおりに DGV の値が変更されないようにロジックを実装する必要があります。

アップデート:

このイベントは、それほど頻繁に呼び出されないため、おそらく適切な、またはさらに優れた代替手段です。少なくとも、ユーザーが列幅を変更した後に位置を調整するだけでよい場合は、そうします。

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
   cbx_Build.Left = dataGridView1.Columns[BuildIndex].HeaderCell.ContentBounds.Left;
   cbx_Publish.Left = dataGridView1.Columns[PubIndex].HeaderCell.ContentBounds.Left;
}

列を削除、追加、または並べ替えることもできる場合、これらのイベントもスクリプト化する必要があります: ColumnRemoved, ColumnAdded, ColumnDisplayIndexChanged. 上記の2行ですべて動作します。

于 2014-09-15T17:22:32.250 に答える