c# - 如何根据其值动态更改 asp 标签的 CSS 类

标签 c# css asp.net twitter-bootstrap

我在管理员端显示有关客户的某些信息,我显示的详细信息之一是“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/

相关文章:

javascript - 如何在 JIRA 小工具中使用 CSS 文件和 JavaScript 库

php - 在图像之间添加空间

asp.net - 尝试使用 NPOI 填充 Excel 模板时出错

C# 将 ListView 滚动到更新的项目

c# - Frame.GoBack(NavigationTransitionInfo) 回调

c# - Fusion loader 找不到实际存在的 DLL

c# - 从 C++ : how to pass nullptr to DateTime? 调用 C#

php - 在 href 上添加和删除 css 类

c# - 需要建议 : Switching from Linq to SQL to Entity Framework

c# - 如何在 asp.net viewstate 中存储数组集合