DataGridView下拉框单元格错误时,改变背景色,作为提示

        /// <summary>
        /// 单元格字体颜色
        /// </summary>
        Color cellForeColor = Color.Black;
        /// <summary>
        /// 单元格背景正常颜色
        /// </summary>
        Color cellNomalColor = Color.White;
        /// <summary>
        /// 单元格背景错误颜色
        /// </summary>
        Color cellErrorColor = Color.Red;
        /// <summary>
        /// 编辑单元格
        /// </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;
            }
        }

在错误的条件时,更改cell.Style.BackColor的背景颜色

DataGridView下拉框单元格错误时,改变背景色,作为提示

上一篇:C#缓存HttpRuntime.Cache


下一篇:C# dotnet 的锁 SemaphoreSlim 和队列