我对 c# 缺乏经验,我正在尝试根据其内容更改 gridview 单元格的背景颜色。我希望同一行中的多个单元格能够是不同的颜色。网格视图生成良好,但未应用颜色。我正在使用以下方法并在创建 gridview 时调用它:
protected void cell_Color()
{
for (int r = 0; r < gv.Rows.Count; r++)
{
for (int c = 0; c < gv.Columns.Count; c++)
{
switch (gv.Rows[r].Cells[c].Text)
{
case "A+":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(0, 255, 0);
break;
case "A":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(100, 255, 100);
break;
case "B":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(0, 0, 255);
break;
case "C":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(255, 255, 25);
break;
case "D":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(128, 64, 0);
break;
case "F":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(255, 0, 0);
break;
}
}
}
}
编辑1:感谢您的帮助。我发现单元格未更新的一个原因是网格视图中的某些内容阻止了完全匹配。因为我不知道它是什么,所以我只是为我正在寻找的东西制作了字符串,并使用 string.contain 检查它们是否为真。这帮助我找到了匹配项,但它只更新了第一列。我正在使用自动生成的列,所以我不能使用 gv.columns.count 所以我只选择了 12,因为这是我用于 gridview 的最多列。代码现在看起来像
protected void RowDataBound(Object sender, GridViewRowEventArgs e)
{
string sAplus = "A+";
string sA = "A";
string sB = "B";
string sC = "C";
string sD = "D";
string sF = "F";
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int r = 1; r <= gv.Rows.Count; r++)
{
if (e.Row.RowIndex == r)
{
string grade = e.Row.Cells[0].Text;
bool bAplus = grade.Contains(sAplus);
bool bA = grade.Contains(sA);
bool bB = grade.Contains(sB);
bool bC = grade.Contains(sC);
bool bD = grade.Contains(sD);
bool bF = grade.Contains(sF);
if (bAplus == true)
e.Row.Cells[0].BackColor = Color.FromArgb(0, 255, 0);
if (bA == true)
e.Row.Cells[0].BackColor = Color.FromArgb(100, 255, 100);
if (bB == true)
e.Row.Cells[0].BackColor = Color.FromArgb(0, 0, 255);
if (bC == true)
e.Row.Cells[0].BackColor = Color.FromArgb(255, 255, 25);
if (bD == true)
e.Row.Cells[0].BackColor = Color.FromArgb(128, 64, 0);
if (bF == true)
e.Row.Cells[0].BackColor = Color.FromArgb(255, 0, 0);
}
}
}
}
因为我使用的是自动生成的列,所以如果我尝试为 Cells 设置一个变量并像 for(int c = 0; c> gv.Columns.Count; c++) 一样循环它,它会说指定的参数超出了有效值。