我在管理员端显示有关客户的某些信息,我显示的详细信息之一是“EventStatus”。现在 EventStatus 有不同的值,例如 'accepted','rejected','pending','in progress' 等。
现在我从数据库中动态加载这些信息。
我想做的是 - 根据它所具有的“值(value)”更改此标签的 css。
我的 aspx 代码是:
<tbody>
<asp:Repeater ID="rptr" runat="server">
<ItemTemplate>
<tr>
<td><%# Eval("CustomerName") %></td>
<td><%# Eval("Name") %></td>
<td><%# Eval("EventType") %></td>
<td><%# Eval("EventDate", "{0:dd-MM-yyyy}") %></td>
<td><asp:Label ID="lblStatus" runat="server" CssClass="label label-primary" Text='<%# Eval("EventStatus") %>'></asp:Label></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
Page_Load 上的 C# 代码:
if (!IsPostBack)
{
EventLogic eventLogic = new EventLogic();
rptr.DataSource = eventLogic.pendingOrders(Convert.ToInt32(Request.QueryString["ID"]));
rptr.DataBind();
}
我已经添加了这个 ItemDataBound_Event :
protected void rptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Event eventItem = (Event)e.Item.DataItem;
Label lblStatus = (Label)e.Item.FindControl("lblStatus ");
switch (eventItem.EventStatus)
{
case "Accepted":
lblStatus.CssClass = "label label-primary";
break;
case "Rejected":
lblStatus.CssClass = "label label-rejected";
break;
case "Pending":
lblStatus.CssClass = "label label-info";
break;
case "In Progress":
lblStatus.CssClass = "label label-warning";
break;
case "Completed":
lblStatus.CssClass = "label label-success";
break;
}
}
}
但我收到一个错误:无法将类型为“System.Data.DataRowView”的对象转换为类型为“BusinessLogic.Event”。
最佳答案
我会使用 ItemDataBound事件而不是依赖于 Eval
。
标记:
<asp:Repeater ID="rptr" runat="server" OnItemDataBound="rptr_ItemDataBound">
<ItemTemplate>
<tr>
<td><asp:Literal ID="litCustomerName" runat="server" /></td>
<td><asp:Literal ID="litName" runat="server" /></td>
<td><asp:Literal ID="litEventType" runat="server" /></td>
<td><asp:Literal ID="litEventDate" runat="server" /></td>
<td><asp:Label ID="lblStatus" runat="server" CssClass="label label-primary"></asp:Label></td>
</tr>
</ItemTemplate>
</asp:Repeater>
代码:
protected void rptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var orderItem = (DataRowView)e.Item.DataItem;
Literal litCustomerName = (Literal)e.Item.FindControl("litCustomerName");
Literal litName = (Literal)e.Item.FindControl("litName");
Literal litEventType= (Literal)e.Item.FindControl("litEventType");
Literal litEventDate = (Literal)e.Item.FindControl("litEventDate");
Label lblStatus = (Label)e.Item.FindControl("lblStatus");
// set the row data e.g.
litCustomerName.Text = orderItem["CustomerName"].ToString();
switch(orderItem["EventStatus"].ToString())
{
case "accepted":
lblStatus.CssClass = "label label-accepted";
break;
case "rejected":
lblStatus.CssClass = "label label-rejected";
break;
// etc...
}
}
}
注意:我对 pendingOrders
使用的类型做了一些假设,出于演示的目的,我假设该类型称为 Order
,您需要对其进行调整以满足您的需要。
关于c# - 如何根据其值动态更改 asp 标签的 CSS 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992629/