我前段时间问过这个问题Hide some datagridview checkbox cell。我无法得到一个好的答案,所以我决定尝试一些不同的东西。
我有一个包含所有贷款分期付款的网格。每期都有一个复选框。当该复选框被选中时,我表示客户正在为此付费。
现在,当已支付分期付款时,不需要该复选框。现在,我禁用了分期付款复选框。它是可见的,但单击时它什么也不做。但我想做的是将复选框涂成绿色。就像在这张图片中一样(颜色是用 Paint 绘制的,它不是真实的图像)
好的,我尝试在使用此代码之前隐藏复选框:
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 分配给特定单元格的复选框单元格,所以我想尝试只绘制复选框。
当我使用实体框架时,我不想在类中添加新字段。