2008-10-08 6 views
7

Строка таблицы создается с помощью жереха: Ретранслятор:ASP.NET: Как установить класс css элемента управления во время DataBind?

<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'." 

оказывается ТЕН т HtmlTableRow имеет другой родитель, чем WebControl иерархию:

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'  

так как установить имя класса css для элемента <TR> во время DataBind?

ответ

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

тр элемент не имеет CssClass, только элементы управления ASP.NET сделать , В этом случае вам понадобится функция для установки атрибута класса. Наверное, проще просто сделать это в коде. – tvanfosson 2008-10-08 15:49:52

1

HtmlTableRow htmlRow = (HtmlTableRow) строка;
htmlRow.Attributes.Add ("class", "announcementItemUnread");

Смежные вопросы