DataGridView DataGridViewCheckBoxColumn 实现禁用效果,因为默认的不带禁用效果
/// <summary>
/// DataGridViewDisableCheckBoxColumn
/// 自定义disablecheckbox列 实现禁用效果
/// </summary>
public class DataGridViewDisableCheckBoxColumn : DataGridViewCheckBoxColumn
{
public DataGridViewDisableCheckBoxColumn()
{
this.CellTemplate = new DataGridViewDisableCheckBoxCell();
}
}
public class DataGridViewDisableCheckBoxCell : DataGridViewCheckBoxCell
{
private bool enabledValue;
public bool Enabled
{
get
{
return enabledValue;
}
set
{
enabledValue = value;
}
}
public override object Clone()
{
DataGridViewDisableCheckBoxCell cell =
(DataGridViewDisableCheckBoxCell)base.Clone();
cell.Enabled = this.Enabled;
return cell;
}
public DataGridViewDisableCheckBoxCell()
{
this.enabledValue = true;
}
protected override void Paint(Graphics graphics,
Rectangle clipBounds, Rectangle cellBounds, int rowIndex,
DataGridViewElementStates elementState, object value,
object formattedValue, string errorText,
DataGridViewCellStyle cellStyle,
DataGridViewAdvancedBorderStyle advancedBorderStyle,
DataGridViewPaintParts paintParts)
{
if (!this.enabledValue)
{
if ((paintParts & DataGridViewPaintParts.Background) ==
DataGridViewPaintParts.Background)
{
SolidBrush cellBackground =
new SolidBrush(cellStyle.BackColor);
graphics.FillRectangle(cellBackground, cellBounds);
cellBackground.Dispose();
}
if ((paintParts & DataGridViewPaintParts.Border) ==
DataGridViewPaintParts.Border)
{
PaintBorder(graphics, clipBounds, cellBounds, cellStyle,
advancedBorderStyle);
}
CheckBoxState state = value != null && (bool)value ?
CheckBoxState.CheckedDisabled : CheckBoxState.UncheckedDisabled;
Size size = CheckBoxRenderer.GetGlyphSize(graphics, state);
Point center = new Point(cellBounds.X, cellBounds.Y);
center.X += (cellBounds.Width - size.Width) / 2;
center.Y += (cellBounds.Height - size.Height) / 2;
CheckBoxRenderer.DrawCheckBox(graphics, center, state);
}
else
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex,
elementState, value, formattedValue, errorText,
cellStyle, advancedBorderStyle, paintParts);
}
}
}
使用:
private void dgvView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex < 0 || e.ColumnIndex > colSelect.Index) { return; }
DataRow dr = (dgvView.Rows[e.RowIndex].DataBoundItem as DataRowView)?.Row;
if (dr != null)
{
string status= DataFun.ConvertToStringByDB(dr["status"]);
if (status!= 'Doing')
{
DataGridViewDisableCheckBoxCell checkCell = (DataGridViewDisableCheckBoxCell)dgvView.Rows[e.RowIndex].Cells[colSelect.Index];
if (checkCell == null) { return; }
checkCell.Enabled = false;
checkCell.ReadOnly = true;
}
}
}

浙公网安备 33010602011771号