如何使用基于单元格值的颜色设置Asp.net GridView单元格样式

我有一个Gridview ,它有一个名为student_Class的列。 网格视图上有大约80个Class。 我使用GroupBy查询对此类进行了分组。

现在我想用不同的颜色设计这个不同的类。 这怎么可能?
RowDataBound上编写所有类并给出颜色并不容易。

还有别的办法吗?

码:

 groups = (ArrayList)Session["selectedclass"]; SELECT id,name,student_Class FROM student where student_Class='"+groups[0].ToString().Trim()+"' group by student_Class. 

提供数据

  id name student_class 1 aa A 2 bb A 3 cc A 4 dd B 5 ee B 6 as B 7 ss B 8 AZZ D 

A的学生class需要相同的颜色(对于单元格), B需要其他颜色。等。

ASPX:

          

代码背后:

 static string[,] ClassNames = { {"A","Red"}, {"B","Blue"}, {"C","Pink"}, {"D","Green"}, // and so on }; protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { string className = e.Row.Cells[2].Text; string color = "Black"; for (int i = 0; i <= ClassNames.GetUpperBound(0); i++) { if (ClassNames[i, 0] == className) { color = ClassNames[i, 1]; e.Row.Cells[2].ForeColor = Color.FromName(color); e.Row.Cells[2].BorderColor = Color.Black; break; } } } 

在此处输入图像描述

如果您只想依赖于值的样式,我必须建议您使用Jquery或javaScript在客户端执行。
此外,它不会影响性能,因为它在客户端而不是在RowDataBound

代码:使用客户端 – (我推荐更多)
在这里,您可以根据类值设置多个条件,无需编写额外的服务器端代码

 $(document).ready(function () { $(".myGvClass").find("td").each(function () { if ($(this).text() == "Class B") { $(this).css("color", "Red"); } if ($(this).text() == "Class A") { $(this).css("color", "Blue"); } if ($(this).text() == "Class C") { $(this).css("color", "green"); } // ..... and so on }); 

HTML标记:

    

代码隐藏:

  GridView1.DataSource = YourDataTable; GridView1.DataBind(); 

截图:

在此处输入图像描述



代码:使用serverside
myGridview_DataBound事件中循环遍历Gridview行,并检查条件单元格值并设置相应的颜色。

 protected void myGridview_DataBound(object sender, EventArgs e) { for (int i = 0; i <= myGridview.Rows.Count - 1; i++) { string myClassVal = myGridview.Rows[i].Cells[2].Text; if (myClassVal == "Class A") { myGridview.Rows[i].Cells[2].BackColor = Color.Green; } else if (myClassVal == "Class B") { myGridview.Rows[i].Cells[2].BackColor = Color.Red; } else { myGridview.Rows[i].Cells[2].BackColor = Color.Orange; } } } 

HTML:

   

代码背后:

 myGridview.DataSource = YourDataTable; myGridview.DataBind(); 

截图:

在此处输入图像描述

有很多方法可以给猫皮肤,但如果你真的不想使用RowDataBound,你可以在其ItemTemplate中使用一个包含样式控件的TemplateColumn。 例如

  ...  ...    ...   ...