When the cell of the DataGridView drop-down box is wrong, change the background color as a prompt

        ///  <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

Guess you like

Origin www.cnblogs.com/pilgrim/p/12171309.html