2010-05-08 27 views
1

我在网格视图中显示学生出勤。不同颜色的gridview数据显示取决于文本

我选择不存在作为A,呈现为P并且留下为L.现在我想要以红色显示A,以绿色显示P.

这是怎么回事。请帮我

+2

所有你的问题是非常糟糕写的,你没有接受任何答案。 – Aristos 2010-05-08 07:30:15

回答

2

请试试这个,让我知道了什么问题,您面临

protected void grdStudent_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow dr = ((DataRowView)e.Row.DataItem).Row; 
     if (dr["Present"].ToString() == "A") 
     { 
      ((Label)e.Row.FindControl("yourLableID")).ForeColor= System.Drawing.Color.Red; 
     //yourLableID is that lable in which you are showing A or P 
     } 
    } 
} 
2

我喜欢的方式是设置标记的颜色,

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
     <Columns> 
     <asp:TemplateField> 
     <ItemTemplate> 
      <asp:Label runat="server" ID="lblStatus" 
       Text='<%# Eval("Status") %>' 
       ForeColor='<%# GetItemColor(Eval("Status")) %>' /> 
     </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 
     </asp:GridView> 

基于代码的方法后面

protected System.Drawing.Color GetForeColor(object statusObj) 
{ 
    System.Drawing.Color color = System.Drawing.Color.Black; 

    switch ((string)statusObj) 
    { 
     case "A": color = System.Drawing.Color.Red; break; 
     case "P": color = System.Drawing.Color.Green; break; 
     case "L": color = System.Drawing.Color.Yellow; break; 
    } 

    return color; 
} 

另外,你可以把逻辑直接放在标记中,但我更喜欢保持尽可能多的.cs文件中的C#代码。
此外,asp:TemplateField为您提供比asp:BoundField更大的灵活性。

你也可以设置背景色属性更好的可视性,但我最喜欢的就是增加一个小的asp:图像,其中ImageUrl属性被以同样的方式切换,表示状态3个图像之间。