我有一个 ASP.NET 页面,其中有一个绑定到 EntityDataSource 的 GridView 控件(请参阅下面的简化代码)。网格显示了一个列表Parent
项目并包括一个显示 .Count 的列Children
对于这位家长。我可以让网格正确显示计数,但我无法弄清楚如何使用 asp:TemplateField SortExpression 值来将排序设置为子项计数。
这是我的代码的样子(为了清楚起见,进行了简化)...
<asp:EntityDataSource ID="edsParentList" runat="server"
ConnectionString="name=FooEntities"
DefaultContainerName="FooEntities"
EnableFlattening="False"
EntitySetName="Parents"
EntityTypeFilter="Parent"
Include="Children"
OrderBy="it.Name"
Where="(it.Name LIKE '%' + @ParentNameLike + '%')
>
<WhereParameters>
<asp:Parameter Name="ParentNameLike" Type="String" DefaultValue="_" />
</WhereParameters>
</asp:EntityDataSource>
<asp:GridView ID="grdParents" runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
DataSourceID="edsParentList"
PageSize="20"
onpageindexchanged="grdParents_PageIndexChanged" onsorted="grdParents_Sorted" >
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<a href="Parent.aspx?id=<%# Eval("ParentID") %>"><%# Eval("Name") %></a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="BirthDate" HeaderText="Birth Date"
DataFormatString="{0:yyyy-MM-dd HH:mm}"
SortExpression = "BirthDate" />
<asp:TemplateField HeaderText="Children" SortExpression="Children.Count">
<ItemTemplate>
<asp:Label ID="lblChildCount" runat="server"
Text='<%# Eval("Children.Count") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这会很好地显示网格。但是,当我单击“子项”列的标题时,会引发以下错误:
“Count”不是以下成员
'Transient.collection[FooEntities.Child(Nullable=True,DefaultValue=)]'。
要提取集合元素的属性,请使用子查询
迭代集合。
我的问题是:如何对由子对象集合组成的导航属性的 .Count() 启用排序?
有没有办法用 SortExpression 指定这一点,或者我是否必须分解并手动执行所有分页和排序? (我显然更愿意避免!)
在您的位置,由于实体类被声明为部分,我将尝试为父实体创建补充部分类代码文件,并添加 ChildCount 只读属性。该属性将引用 Children 导航属性。然后我会对此进行排序。
在这里,我假设 EntityDataSource 可以与我所说的实体上的派生属性一起使用。我没有测试过这个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)