簡體   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