少し前にこの質問をしました。datagridviewチェックボックスセルを非表示にします。良い答えが得られなかったので、別のことを試してみることにしました。
私はローンのすべての分割払いのグリッドを持っています。すべての分割払いにはチェックボックスがあります。そのチェックボックスがチェックされているとき、私はクライアントがそのチェックボックスの代金を払っていることを示しています。
これで、分割払いがすでに支払われている場合、チェックボックスは必要ありません。今、私は有料の分割払いのチェックボックスを無効にしました。表示されますが、クリックしても何も起こりません。しかし、私がやりたかったのは、チェックボックスを緑色でペイントすることです。この画像のように(色はペイントで描かれていますが、実際の画像ではありません)
わかりました。このコードを使用する前に、チェックボックスを非表示にしようとしました。
private void dgv_Cuotas_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
if (dgv_Cuotas.Columns[e.ColumnIndex].Name == "Seleccionar" && Convert.ToBoolean(dgv_Cuotas.Rows[e.RowIndex].Cells["pagada"].Value) == true)
{
e.CellStyle.BackColor = Color.Green;
e.PaintBackground(e.ClipBounds, true);
e.Handled = true;
}
}
}
これでセル全体をペイントしますが、チェックボックスをペイントしたいだけです。また、この実装では、そのセルをクリックすると、チェックボックスをクリックしていることに気付くことができ、次のように背景色が白に変わります。
実行時にDatasource=lista_cuota(分割払いのリスト)を割り当てて、DataGridView(dgv_Cuotas)の行と列を作成しています。そのため、コードによってチェックボックス列が後に追加されます。
DataGridViewCheckBoxColumn chbox = new DataGridViewCheckBoxColumn();
{
chbox.CellTemplate = new DataGridViewCheckBoxCell();
chbox.HeaderText = "";
chbox.Name = "Seleccionar";
chbox.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
chbox.FlatStyle = FlatStyle.Standard;
}
dgv_Cuotas.Columns.Insert(16, chbox);
dgv_Cuotas.Columns[16].DisplayIndex = 0;
このようにすると、DataGridViewTextBoxCellを特定のセルに割り当てるチェックボックスセルを「非表示」にすることができないため、代わりにチェックボックスだけをペイントしてみたかったのです。
Entity Frameworkを使用しているので、クラスに新しいフィールドを追加したくありません。