更改DataGridViewComboBoxColumn的单元格的背面颜色 [英] Change the back color of the cell for DataGridViewComboBoxColumn
问题描述
我创建了一个DataGridViewComboBoxColumn类型的DataGridView对象,允许用户从下拉列表中选择值。如果用户选择高,我想为组合框的背面着色。但是,它不会组合框,而只是组合框的值。
代码是:
dgvOverallRisk.Rows [0] .Cells [1] .Style.ForeColor = Color.Aqua;
dgvOverallRisk.Rows [0] .Cells [1] .Style.BackColor = Color.Red;
它看起来像这样:
巧合的是,我刚刚在 ForeColor
发现
I created a DataGridView object with columns of type DataGridViewComboBoxColumn to allow the user to select values from a drop down list. I want to color the back of the combo box if the user selected "high" for example. However, it doesn't color the combo box but only the combo box values.
The code is:
dgvOverallRisk.Rows[0].Cells[1].Style.ForeColor = Color.Aqua;
dgvOverallRisk.Rows[0].Cells[1].Style.BackColor = Color.Red;
And it looks like this:
Coincidentally, I just answered a similar question on the ForeColor
found here. Essentially the same, you have two options:
Set the
FlatStyle
. It might not look the way you want though.theComboBoxColumn.FlatStyle = FlatStyle.Flat;
This is not an exact solution for you, as I am on Windows 8.1 and judging by your screenshots, you're on Windows 7. They have differing display styles on their
ComboBox
controls, but this should give you a general idea of a possible direction you could take. Handle theDataGridView.CellPainting
andDataGridView.EditingControlShowing
events to manually draw theComboBox
cells.this.dataGridView1.CellPainting += this.dataGridView1_CellPainting; this.dataGridView1.EditingControlShowing += this.dataGridView1_EditingControlShowing; this.dataGridView1.Rows[0].Cells[1].Style.ForeColor = Color.DarkRed; this.dataGridView1.Rows[0].Cells[1].Style.BackColor = Color.Bisque; this.dataGridView1.Rows[1].Cells[1].Style.ForeColor = Color.SpringGreen; this.dataGridView1.Rows[1].Cells[1].Style.BackColor = Color.Purple;
// Paint the cell when not in edit mode.
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
if (this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewComboBoxCell)
{
var cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
var foreColor = cell.Style.ForeColor.Name == "0" ? Color.Black : cell.Style.ForeColor;
e.Paint(e.ClipBounds, DataGridViewPaintParts.Border);
e.Paint(e.ClipBounds, DataGridViewPaintParts.ContentBackground);
using (Brush forebrush = new SolidBrush(foreColor))
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;
}
}
}
// Paint the cell in edit mode.
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (this.dataGridView1.CurrentCellAddress.X == combo.DisplayIndex)
{
ComboBox cb = e.Control as ComboBox;
if (cb != null)
{
cb.DropDownStyle = ComboBoxStyle.DropDownList;
cb.DrawMode = DrawMode.OwnerDrawFixed;
cb.DrawItem -= this.cb_DrawItem;
cb.DrawItem += this.cb_DrawItem;
}
}
}
// Manually paint the combobox.
private void cb_DrawItem(object sender, DrawItemEventArgs e)
{
ComboBox cb = sender as ComboBox;
// Non-sourced vs sourced examples.
string value = cb.Items[e.Index].ToString();
// string value = (cb.DataSource as DataTable).Rows[e.Index].ItemArray[SourceColumnIndex];
if (e.Index >= 0)
{
using (Brush forebrush = new SolidBrush(cb.ForeColor))
using (Brush backbrush = new SolidBrush(cb.BackColor))
{
e.Graphics.FillRectangle(backbrush, e.Bounds);
e.DrawBackground();
e.DrawFocusRectangle();
e.Graphics.DrawString(value, e.Font, forebrush, e.Bounds);
}
}
}
这篇关于更改DataGridViewComboBoxColumn的单元格的背面颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!