C#变色为行如果不为空(c# change color for a row if its not e

2019-07-31 23:58发布

我有一个表中的一些关于它的价值。 如果行单元格“名称”不是背景,紫色的空变色。

Name    ID    Customers

Niky    1     yes       // here change background to violet
        2     no
Donna   3     yes       // here change background to violet
Baka    4     no        // here change background to violet
        5     yes
        6     no

我曾尝试这个代码,但我不工作,不知道为什么:

 foreach (DataGridViewRow row1 in dataGridView1.Rows)
        {
            if (row1.Cells[0].Value != null)
            {
                row1.DefaultCellStyle.BackColor = Color.Violet;
            }
        }

Answer 1:

通常的地方把这种如果代码中内DataBindingComplete事件处理程序,可以附上事件如下或使用设计:

dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

然后在处理程序中有这样的事情:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row1 in dataGridView1.Rows)
    {
        if (row1.Cells.Cast<DataGridViewCell>().Any(c => c.Value == null || string.IsNullOrWhiteSpace(c.Value.ToString())))
        {
            row1.DefaultCellStyle.BackColor = Color.Violet;
        }
        else
        {
            row1.DefaultCellStyle.BackColor = Color.White;
        }
    }
}

在上面的代码我在所有的细胞,而不仅仅是第一改变你原来的代码现在看起来。


你也可以把代码中CellFormatting事件。



Answer 2:

实现一个很好的(但不是高性能的)的方式是事件cell-formatting在DataGridView的。 你可以阅读在整个文档MSDN 。 其实质是,你订阅格式事件在这,你可以做你与格式的问题。

这样你可以肯定的是,颜色等就好了无论用户是在调整,滚动不管。

BTW:我不会做它在客厅事件,因为我了解到,通常你会打破自动绘制逻辑的东西;)

欲了解更多信息,有关于在cellstyles的文章MSDN ,这将是在这种情况下矫枉过正。 但你永远无法知道的足够多的:)



Answer 3:

I dont know where you put your colour code but Ive always done it in the drawing section

Heres oen where I coloured the line depending on a status, except for the first column which was dependant on yellow or blue - this is work in progress code and should be tidied up

  private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex > 0)
        {
            if (dataGridView1.Rows[e.RowIndex].Cells[].Value.ToString() == "good")
            {
                e.CellStyle.BackColor = Color.PaleGreen;
                    e.CellStyle.SelectionForeColor = Color.Black;
                    e.CellStyle.SelectionBackColor = Color.Wheat;

            }
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "warning")
            {
                e.CellStyle.BackColor = Color.LightGoldenrodYellow;
                e.CellStyle.SelectionForeColor = Color.Black;
                e.CellStyle.SelectionBackColor = Color.Wheat;
            }
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "error")
            {
                e.CellStyle.BackColor = Color.Salmon;
                e.CellStyle.SelectionForeColor = Color.Black;
                e.CellStyle.SelectionBackColor = Color.Wheat;
            }

                if (e.Value.ToString() == "Yellow")
                {
                    e.CellStyle.BackColor = Color.Yellow;
                }
                else
                    if (e.Value.ToString() == "Blue")
                    {
                        e.CellStyle.BackColor = Color.LightBlue;
                    }


        }
    }

Or you can do:

foreach(DataGridViewRow r in dataGridView1.Rows) 
{ 
      if(!String.IsNullOrEmpty(r.Cells[0].Value.ToString()))
      { 
           r.DefaultCellStyle.BackColor = Color.Violet; 
      } 
} 

so if all the first cell of a line is not empty, colour the row violet.



Answer 4:

你可以做的GridView控件的RowDataBound事件

您也可以使用这个应用可以去throught它:

foreach(DataGridViewRow r in dataGridView1.Rows)
{
      if(r.Cells.Cast<DataGridViewCell>().Any(c => c.Value.ToString() == string.Empty)) 
      {
           r.DefaultCellStyle.BackColor = Color.Violet;
      }
}


文章来源: c# change color for a row if its not empty