繁体   English   中英

在datagridview C#中更改行颜色

[英]Changing row color in datagridview C#

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

这是我目前拥有的:

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();
    }
}

您有什么帮助吗? 我只是根据大小的值更改添加的行颜色的方法。

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

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

然后最后一句话:

我只是根据大小的值更改添加的行颜色的方法。

这是两件事,所以不清楚您到底想做什么。

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

示例:将大小设置为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. 这将根据size的值将所有行设置为相同的颜色。

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

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

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

如果您DataGridView绑定到DataSet Table ,那么你可以/将不得不使用取决于你的表不同的东西。 下面是一个从dgrv获取字符串的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则行颜色将变为color。

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

这不是最佳方法,尽管匿名函数/委托将是解决此问题的许多更好方法之一,因为仅当单元格值“大于”提供的值时,此方法才进行比较,这严重限制了该方法的功能。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM