Một dòng của bảng được tạo ra sử dụng một asp: Repeater:ASP.NET: Làm thế nào để thiết lập lớp css của một điều khiển trong DataBind?
<asp:repeater ID="announcementsRepeater" OnItemDataBound="announcementsRepeater_ItemDataBound" runat="Server">
<itemtemplate>
<tr id="announcementRow" class="announcementItem" runat="server">...</tr>
</itemtemplate>
</asp:repeater>
Bây giờ trong các dữ liệu-ràng buộc tôi muốn đánh dấu thông báo "chưa đọc" với một lớp css khác nhau, do đó web anh chàng có thể thực hiện bất cứ điều gì phong cách ông muốn phân biệt giữa đọc và thông báo chưa đọc:
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";
}
trừ các diễn viên thất bại trong thời gian chạy:
System.InvalidCastException occurred
Message="Unable to cast object of type 'System.Web.UI.HtmlControls.HtmlTableRow' to type 'System.Web.UI.WebControls.WebControl'."
hóa ra tha t HtmlTableRow
có một hệ thống cấp bậc cha mẹ khác với WebControl
:
HtmlTableRow
: HtmlContainerControl
: HtmlControl
: System.Web.UI.Control
đó là cuối cùng nơi WebControl đến từ
WebControl
: System.Web.UI.Control
Vì vậy, tôi đã thay đổi mã để cố gắng sử dụng một System.Web.UI.Control thay vì:
Control row = (Control)e.Item.FindControl("announcementRow");
if (row != null)
row.CssClass = row.CssClass + " announcementItemUnread";
Nhưng Control
không chứa một định nghĩa cho CssClass
:
'System.Web.UI.Control' does not contain a definition for 'CssClass'
vậy làm cách nào để tôi đặt tên lớp css cho thành phần <TR>
trong DataBind?
HtmlTableRow không chứa một tài sản hoặc CssName: 'System.Web.UI.HtmlControls.HtmlTableRow' không chứa một định nghĩa cho các phần tử –