不同颜色的gridview数据显示取决于文本

时间:2010-05-08 06:54:54

标签: c# .net asp.net gridview

我正在网格视图中显示学生出勤率。

我选择缺席作为A,作为P出现并离开为L.现在我想显示A为红色,P为绿色。

怎么样?请帮帮我

2 个答案:

答案 0 :(得分: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
        }
    }
}

答案 1 :(得分: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。

您还可以设置BackColor属性以获得更好的可见性,但我最喜欢的是添加一个小的asp:Image,其中ImageUrl属性以相同的方式切换,代表状态的3个图像之间。