我正在网格视图中显示学生出勤率。
我选择缺席作为A,作为P出现并离开为L.现在我想显示A为红色,P为绿色。
怎么样?请帮帮我
答案 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个图像之间。