[英]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.