2008-10-08 49 views
7

使用一个asp生成的表行:中继器:ASP.NET:如何在DataBind中设置控件的css类?

<asp:repeater ID="announcementsRepeater" OnItemDataBound="announcementsRepeater_ItemDataBound" runat="Server"> 
    <itemtemplate> 
     <tr id="announcementRow" class="announcementItem" runat="server">...</tr> 
    </itemtemplate> 
</asp:repeater> 

现在,在数据绑定我要标记与不同的CSS类“未读”的公告,从而使网络的人可以执行任何造型他想读和未读的公告区分:

protected void announcementsRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) 
     return; 

    // get the associated data item 
    Announcement announcement = (Announcement)e.Item.DataItem; 

    WebControl row = (WebControl)e.Item.FindControl("announcementRow"); 
     if (row != null) 
     row.CssClass = row.CssClass + " announcementItemUnread"; 
} 

除了转换失败在运行时:

System.InvalidCastException occurred 
    Message="Unable to cast object of type 'System.Web.UI.HtmlControls.HtmlTableRow' to type 'System.Web.UI.WebControls.WebControl'." 

原来,塔牛逼HtmlTableRowWebControl不同的父层次结构:

HtmlTableRow 
    : HtmlContainerControl 
     : HtmlControl 
     : System.Web.UI.Control 

这是最终其中的WebControl来自

WebControl 
    : System.Web.UI.Control 

所以我改变了代码,尝试使用System.Web.UI.Control代替:

Control row = (Control)e.Item.FindControl("announcementRow"); 
if (row != null) 
    row.CssClass = row.CssClass + " announcementItemUnread"; 

Control不包含定义CssClass

'System.Web.UI.Control' does not contain a definition for 'CssClass'  

那么我如何在DataBind中为<TR>元素设置css类名?

回答

8
HtmlControl htmlRow = (HtmlControl)row; 
    htmlRow.Attributes["class"] = htmlRow.Attributes["class"] + " announcementItemUnread"; 
0

铸造它HtmlTableRow

HtmlTableRow row = (HtmlTableRow)e.Item.FindControl("announcementRow"); 
+1

HtmlTableRow不包含CssName属性之一: “System.Web.UI.HtmlControls.HtmlTableRow”不包含定义“的CssClass” – 2008-10-08 15:46:00

0

为什么不能在声明中只是绑定?

<tr id="announcementRow" runat="server" class="<#% functionToDetermineWhichtoShow(ItemInBoundSetToPass) %>">...</tr> 
+0

tr元素不具备的CssClass,只ASP.NET控件做。在这种情况下,你需要一个函数来设置类属性。只是在代码隐藏方面做起来可能更容易。 – tvanfosson 2008-10-08 15:49:52

1

HtmlTableRow htmlRow =(HtmlTableRow)row;
htmlRow.Attributes.Add(“class”,“announcementItemUnread”);