更改datagridview中的行颜色C#

时间:2016-11-24 15:01:33

标签: c# datagridview colors

所以我试图根据单元格的值更改DataGridView行的颜色。基本上,我将实际文件放入DataGridView,它将显示该文件的信息。

这就是我现在所拥有的:

double size;

size = Math.Round(MeuFicheiro.Length / 1024d, 4);

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (size >= 0 && size <= 4999)
    {
    row.DefaultCellStyle.BackColor = Color.Red;
    }
    if (size >= 5000)
    {
    row.DefaultCellStyle.BackColor = Color.Green;
    }
    else if (size >= 15000)
    {
    row.DefaultCellStyle.BackColor = Color.Orange;
    }
}

但这不起作用,因为它不起作用,因为当我插入一个新的填充时,它将改变所有行的颜色而不是我添加的行。

在做了一些更改之后,我在我创建的方法上得到了这些信息,以便将信息显示在DataGridView中:

private void MostrarDataGridView()
{
    try
    {
    con = new SqlConnection(cs.DBConn);
    con.Open();

    cmd = new SqlCommand("SELECT * FROM InfoFile", con);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds, "InfoFiel");

    dataGridView1.DataSource = ds.Tables["InfoFile"].DefaultView;

    DataTable dt = ds.Tables["InfoFile"];
    System.Data.DataRowView dgrv = (System.Data.DataRowView)
    string fnome = dgrv.Row.ItemArray[0].ToString();

    con.Close();
    }
}

你有任何帮助吗?我只是根据大小的值更改添加的行颜色。

1 个答案:

答案 0 :(得分:0)

开始......你的第一句话和最后一句是矛盾的。首先你说...

  

所以我试图根据单元格的值更改DataGridView行的颜色。

然后是最后一句:

  

我只是根据尺寸值更改添加的行颜色。

这是两件不同的事情,所以目前还不清楚你究竟想做什么。

如果您只是比较size,那么所有行都将是相同的颜色,具体取决于size的值。在您的代码尝试中,如果size大于15000,则所有行都将为橙色。但是,在您的代码之后,如果tamanho小于5000,则每行将首先设置为红色,然后再次设置为橙色。这种逻辑看起来不正确。

示例:将size = 5001和tamanho设置为4999。

if (size >= 0 && tamanho <= 4999)

在上面的if语句中,它会将颜色更改为红色。然后,下一个if语句:

if (size >= 5000)
执行

是因为前一个if语句中没有“else”子句。这个if语句肯定会将颜色更改为绿色,因为size = 5001.所以你最后将行设置为红色是不必要的并且令人困惑。

只要size小于5000,如果tamanho小于5000,则所有行都将为红色;如果tamanho大于4999,则所有行都为白色。 如果size大于4999但小于15000,则无论tamanho是什么,所有行都将为绿色。 如果size大于14999,则无论tamanho是什么,所有行都将为橙色。

由于size(和tamanho)的值在循环遍历行时永远不会改变,因此您的逻辑只会将所有行更改为与不变的变量size.匹配的颜色这会将所有行设置为相同的颜色,具体取决于size的值。

因此,在提及第一个问题时:根据单元格的值更改DataGridView行的颜色。在您的代码中,您不会从任何单元格中获取任何值DataGridView与任何东西进行比较。如果要在特定单元格值大于设定值时更改行颜色,则需要获取该单元格值。下面是如何从DataGridView中的单元格中获取值并检查其值的一个示例。

使用foreach (DataGridViewRow row in dataGridView1.Rows)循环,您可以使用以下代码访问当前行的FIRST单元格/(列)。

String stringValue = row.Cells[0].Value.ToString();

如果您的DataGridView绑定了DataSet Table,那么您可能/将必须根据您的表格使用不同的内容。下面的示例是从dgrv获取字符串。

System.Data.DataRowView dgrv = (System.Data.DataRowView)DataTable.CurrentRow.DataBoundItem;

如果当前行的'Cell [colIndex]'大于'valueToCompare',则下面的代码将更改该行的行颜色。在这种情况下,假设单元格值是一个字符串,但包含一个整数值。因此,要获取此整数值并将其与valueToCompare进行比较,我们需要将字符串解析为整数,然后比较这些值,然后根据单元格值是否大于valueToCompare来更改行颜色。如果字符串(单元格值)不是有效整数,则GetIntValue(string)返回0.

private void SetRowColorBasedOnColValue(int valueToCompare, int colIndex, Color color)
{
  foreach (DataGridViewRow row in dataGridView1.Rows)
  {
    if (row.Cells[colIndex] != null && row.Cells[colIndex].Value != null)
    {
      int cellValue = GetIntValue(row.Cells[colIndex].Value.ToString());
      if (cellValue >= valueToCompare)
      {
        row.DefaultCellStyle.BackColor = color;
      }
      else
      {
        row.DefaultCellStyle.BackColor = Color.White;
      }
    }
    else
    {
      // null cell
      row.DefaultCellStyle.BackColor = Color.White;
    }
  }
}

private int GetIntValue(string inString)
{
  int returnValue = 0;
  if (int.TryParse(inString, out returnValue))
    return returnValue;
  return returnValue;
}

下面我使用了上面的方法...我根据colIndex的单元格值设置行颜色。如果单元格的值大于valueToCompare,则行颜色将变为颜色。

// SetRowColorBasedOnColValue(valueToCompare, colIndex, color);
SetRowColorBasedOnColValue(15000, 0, Color.Orange);
SetRowColorBasedOnColValue(5000, 0, Color.Green);
SetRowColorBasedOnColValue(0, 2, Color.Red);

这不是最好的方法,因为匿名函数/委托将是解决此问题的更好方法之一,因为此方法仅比较单元格值是否“大于”提供的值,这严重限制了方法。

希望这有帮助。

相关问题