如何在datagridview中更改行颜色?

EB.*_*EB. 135 c# datagridview background-color winforms

我想在datagridview中更改特定行的颜色.当columncell 7的值小于columncell 10中的值时,该行应更改为红色.有关如何完成此操作的任何建议吗?

Ric*_*hez 183

您需要遍历datagridview中的行,然后比较每行上的第7列和第10列的值.

试试这个:

foreach (DataGridViewRow row in vendorsDataGridView.Rows) 
     if (Convert.ToInt32(row.Cells[7].Value) < Convert.ToInt32(row.Cells[10].Value)) 
     {
         row.DefaultCellStyle.BackColor = Color.Red; 
     }
Run Code Online (Sandbox Code Playgroud)

  • 里卡多.我将.text更改为.value并更改为DefaultCellstyle.Backcolor = color.red并且代码工作正常!感谢您的时间!EB (2认同)

Ede*_*den 59

我只是在调查这个问题(所以我知道这个问题大约在3年前发布,但也许它会帮助某些人......)但似乎更好的选择是将代码放在RowPrePaint事件中,这样你就不会必须遍历每一行,只有那些被绘制的行(所以它会在大量数据上表现得更好:

附加到活动

this.dataGridView1.RowPrePaint 
    += new System.Windows.Forms.DataGridViewRowPrePaintEventHandler(
        this.dataGridView1_RowPrePaint);
Run Code Online (Sandbox Code Playgroud)

事件代码

private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    if (Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[7].Text) < Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[10].Text)) 
    {
        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Beige;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我真的很喜欢你如何在根部发现问题,而不是等到所有的东西都被涂上之后.这是一种非常"开箱即用"的方法.大多数人宁愿再次循环遍历每一行...... (3认同)

SLa*_*aks 23

你正在寻找这个CellFormatting活动.
是一个例子.

  • 与这种方法的不同之处在于,每一个单元格都将进行比较,而不仅仅是一个单元格.如果你有几百个单元格,这可能是一个性能问题. (2认同)

小智 21

我也无法更改文本颜色 - 我从未看到颜色变化.

直到我添加的代码的文本颜色更改为活动DataBindingsCompleteDataGridView.之后它起作用了.

我希望这能帮助那些面临同样问题的人.


Dem*_*emi 13

类似于以下内容...假设单元格中的值为整数.

foreach (DataGridViewRow dgvr in myDGV.Rows)
{
  if (dgvr.Cells[7].Value < dgvr.Cells[10].Value)
  {
    dgvr.DefaultCellStyle.ForeColor = Color.Red;
  }
}
Run Code Online (Sandbox Code Playgroud)

未经测试,对任何错误表示歉意.

如果您知道特定行,则可以跳过迭代:

if (myDGV.Rows[theRowIndex].Cells[7].Value < myDGV.Rows[theRowIndex].Cells[10].Value)
{
  dgvr.DefaultCellStyle.ForeColor = Color.Red;
}
Run Code Online (Sandbox Code Playgroud)


Den*_*ore 7

有些人喜欢用Paint,CellPaintingCellFormatting事件,但请注意,在这些事件中更改样式引起递归调用.如果使用DataBindingComplete它将只执行一次.其论点CellFormatting是它仅在可见单元格上调用,因此您不必格式化不可见单元格,而是将它们格式化多次.


Pra*_*020 5

你可以改变Backcolor使用condition.and调用这个函数应用后逐行DatasourceDatagridView

这是该功能。只需复制并放在后面Databind

private void ChangeRowColor()
{
    for (int i = 0; i < gvItem.Rows.Count; i++)
    {
        if (BindList[i].MainID == 0 && !BindList[i].SchemeID.HasValue)
            gvItem.Rows[i].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#C9CADD");
        else if (BindList[i].MainID > 0 && !BindList[i].SchemeID.HasValue)
            gvItem.Rows[i].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#DDC9C9");
        else if (BindList[i].MainID > 0)
            gvItem.Rows[i].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#D5E8D7");
        else
            gvItem.Rows[i].DefaultCellStyle.BackColor = Color.White;
    }
}
Run Code Online (Sandbox Code Playgroud)