/// <summary> /// cell font color /// </ summary> Color cellForeColor = Color.Black; /// <summary> /// cell background normal color /// </ summary> Color cellNomalColor = Color.White; /// <Summary> /// cell background color error /// </ Summary> color = cellErrorColor Color.Red; /// <Summary> /// editing cells /// </ summary> /// <param name = "sender"> </ param> /// <param name = "e"></param> private void dgvSnpDistribute_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { ComboBox cb = e.Control as ComboBox; //if (cbox != null && !object.ReferenceEquals(cbox, cb) && cb != null || cbox == null) //{ // cbox = cb; //} if (cb != null) { cb.DropDownStyle = ComboBoxStyle.DropDownList; cb.DrawMode = DrawMode.OwnerDrawFixed; cb.DrawItem -= Cb_DrawItem; cb.DrawItem += Cb_DrawItem; } } /// <summary> /// 单元格重绘 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Cb_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) { return; } ComboBox cb = sender as ComboBox; if (cb != null) { cb.BackColor = cellNomalColor; string value = cb.Items[e.Index].ToString(); using (Brush foreBrush = new SolidBrush(cellForeColor)) using (Brush backBrush = new SolidBrush(cb.BackColor)) { e.Graphics.FillRectangle(backBrush, e.Bounds); e.DrawBackground(); e.DrawFocusRectangle(); e.Graphics.DrawString(value, cb.Font, foreBrush, e.Bounds); } } } /// <summary> /// 重新编写单元格绘制函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgvSnpDistribute_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) { return; } DataGridViewComboBoxCell cell = dgvSnpDistribute.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell; if (cell != null) { e.Paint(e.ClipBounds, DataGridViewPaintParts.Border); e.Paint(e.ClipBounds, DataGridViewPaintParts.ContentBackground); using (Brush foreBrush = new SolidBrush(cellForeColor)) using (Brush backBrush = new SolidBrush(cell.Style.BackColor)) using (StringFormat format = new StringFormat()) { Rectangle rect = new Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 19, e.CellBounds.Height - 3); format.LineAlignment = StringAlignment.Center; e.Graphics.FillRectangle(backBrush, rect); e.Graphics.DrawString(cell.FormattedValue.ToString(), e.CellStyle.Font, foreBrush, rect, format); } e.Paint(e.ClipBounds, DataGridViewPaintParts.ErrorIcon); e.Paint(e.ClipBounds, DataGridViewPaintParts.Focus); e.Handled = true; } }
In the wrong condition, change the background color of cell.Style.BackColor