[英]Changing row color in datagridview C#
所以我試圖根據單元格的值更改DataGridView
行的顏色。 基本上,我將實際文件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();
}
}
您有什么幫助嗎? 我只是根據大小的值更改添加的行顏色的方法。
首先...您的第一句話和最后一句是矛盾的。 首先你說...
所以我試圖根據單元格的值更改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.