我的表单应用程序上有DataGridView
。从数据库中的表中检索数据并在DataGridView
中显示数据后,我将绿色颜色应用于行的某些单元格的 BackColor 满足一定条件。
在这些单元格被绿色着色之后,程序会让它们经历另一个条件,如果它们将整行 BackColor 红色着色不满足条件。
然而,似乎预先着色的细胞不能用新颜色覆盖。 即使我应用以下代码为整行红色着色,它也仅适用于尚未预先着色的单元格。
for(int i=0; i<myDataGridview.Rows.Count; i++){
if(/*a certain condition FAILS*/){
myDataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Red;
}
}
现在,我正逐一着色那些预先着色的细胞红色,但这需要花费大量时间和代码,如:
for(int i=0; i<myDataGridview.Rows.Count; i++){
if(/*a certain condition FAILS*/){
//Trying to color the whole row RED, but not working
myDataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Red;
//Manually color the cells, which are pre-colored to green, RED
myDataGridView.Rows[i].Cells[6].Style.BackColor = Color.Red;
myDataGridView.Rows[i].Cells[7].Style.BackColor = Color.Red;
....
myDataGridView.Rows[i].Cells[13].Style.BackColor = Color.Red;
myDataGridView.Rows[i].Cells[16].Style.BackColor = Color.Red;
}
}
我想知道是否有更好的方法来覆盖backColor。有人可以帮忙吗?
这是一个示例(模仿)DataGridView。
那些第一个条件失败的人会自动将整行排成红色,这样可行。但是,如果他们通过第一个条件并获得他们的&#34; Passed1&#34;细胞绿色,然后失败第二个条件,如你所见,这些细胞保持绿色。我想将整行红色,甚至将预先着色到绿色的单元格覆盖为红色。
答案 0 :(得分:0)
datagridview控件存在一个问题,即在使用DefaultCellStyle属性显示表单之后,您无法更改任何单元格的颜色。因此,在调用Shown()之前运行的方法或触发的事件不会改变颜色。这可能是问题。可能你必须创建一个绘画方法并在Shown()之前调用它。
答案 1 :(得分:0)
绘制单元格时,单元格背景颜色具有优先顺序。从顶部开始,它将在列表中向下级联,直到颜色设置为*:
Cell.Style.BackColor
Row.DefaultCellStyle.BackColor
DataGridView.AlternatingRowsDefaultCellStyle.BackColor
DataGridView.RowsDefaultCellStyle.BackColor
Column.DefaultCellStyle.BackColor
DataGridView.DefaultCellStyle.BackColor
*此列表并不广泛,可能不包含所有可能的BackColor可访问属性。
您可能正在做的事情类似于为Cell.Style.BackColor
列中的单元格设置Passed1
,然后是您发布的代码逻辑。由于Green
的优先级高于设置的Red
,因此会产生类似于您的结果:
假设您的两个Passed
列的条件是二进制(Yes
或No
),您可以通过&#34;降低&#34;来解决这个问题。通过设置Green
:
Column.DefaultCellStyle.BackColor
背景的优先级
private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
this.dataGridView1.Columns["Passed1"].DefaultCellStyle.BackColor = Color.Green;
this.dataGridView1.Columns["Passed2"].DefaultCellStyle.BackColor = Color.Green;
foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
if (row.Cells["Passed1"].Value.ToString() == "No" || row.Cells["Passed2"].Value.ToString() == "No")
{
row.DefaultCellStyle.BackColor = Color.Red;
}
}
}
结果是: