所以我试图根据单元格的值更改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();
}
}
你有任何帮助吗?我只是根据大小的值更改添加的行颜色。
答案 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);
这不是最好的方法,因为匿名函数/委托将是解决此问题的更好方法之一,因为此方法仅比较单元格值是否“大于”提供的值,这严重限制了方法。
希望这有帮助。