我目前正在使用GridView,我想根据行所绑定的对象的属性为Row设置CssClass.
我尝试了以下但它不起作用(见评论):
<asp:GridView id="searchResultsGrid" runat="server" AllowPaging="true" PageSize="20" AutoGenerateColumns="false">
<!-- The following line doesn't work because apparently "Code blocks
aren't allowed in this context: -->
<RowStyle CssClass="<%#IIF(DataBinder.Eval(Container.DataItem,"NeedsAttention","red","") %>
<Columns>
<!--............-->
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
现在我可以简单地处理GridView的RowDataBound事件并更改那里的行的css类......但我试图在UI和页面/业务逻辑层之间保持清晰的分离.
我不知道如何做到这一点,我期待听到任何建议.
谢谢,
-Frinny
您不能在声明性标记中执行此操作。
几乎所有GridView的声明性属性(包括GridView.RowStyle)都是网格级别的设置而不是行级别的。除此之外 TemplateFields,它们不是绑定的数据容器,因此它们无权访问其行中的数据。
如果你想在 .aspx 模板中保留这个逻辑,你唯一真正的选择是使用模板字段并操作它们的内容:
<asp:TemplateField>
<ItemTemplate>
<span class="<%# ((string)Eval("property3")) == "NeedsAttention" ? "red" : string.Empty %>">
<%# Eval("property1") %>
</span>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
根据您想要做什么,这可能会很尴尬 - 您无权访问包含<td>(或<tr>就此而言),您必须重复每个单元格的格式。
该GridView班去了很多的长度隐藏的HTML的细节和你的造型。毕竟,您可以创建一个甚至不会呈现为 HTML 表格的GridView 控制适配器。(虽然这可能是不太可能的。)
因此,即使您试图避免它,您最好OnRowDataBound还是在处理程序中处理它 - 或者使用 a Repeater(如果合适的话)。
| 归档时间: |
|
| 查看次数: |
9157 次 |
| 最近记录: |