我使用的是ASP.NET 3.5、LLBLGenPro 3.0和DevExpress 10.1.7。我有一台带LinqServerModeDataSource的ASPxGridView。ASPxGridView的每一行对应于来自LLBLGenPro的一个TaskEntity。TaskEntity的属性之一是OrganizationCollection,它是相关OrganizationEntities的集合。我想要做的是向ASPxGridView中添加一个名为OrgList的列,该列将按名称显示相关组织的列表(理想情况下,在<br>-delimited列表中,因此每个项目都将在其各自的行中,但列表将全部在同一个单元格中,如果该列的EncodeHtml属性设置为“False”,则可以使用该列)。
目前,我在lsmdsTasks_Selecting()事件中有(这是一个简化的例子):
IQueryable<TaskEntity> taskQuery;
taskQuery = TaskQueryStore.GetTasks(...);
var query = from task in taskQuery
select new
{
task.Id,
task.TaskName,
OrgList = ???
}
e.KeyExpression = "Id";
e.QueryableSource = query;到目前为止,我已经为“?”做了一些尝试,结果如下:
首先,我尝试了:
OrgList = task.OrganizationCollection.Aggregate("", (acc, item) => (acc == "" ? "" : acc + "<br>") + item.OrgName)这给了我以下ORMException:“这个Linq提供程序不支持‘Aggregate’。请尝试使用支持的方法重写查询。”
然后,我试着:
OrgList = String.Join("<br>", task.OrganizationCollection.Select(x => x.OrgName).ToArray())这给了我以下ORMException:“对'Join‘的方法调用没有已知的映射数据库函数或其他已知的处理程序。”
唯一有效的方法是:
OrgList = GetOrgList(task.Id)然后单独定义GetOrgList()方法,该方法接受任务Id并以我想要的格式构建列表,然后将其作为字符串返回。这实际上以我想要的方式显示了网格中的数据,但缺点是,当您尝试对此列进行排序时,它无法正常工作,并且当您尝试使用AutoFilter对此列进行筛选时,它会过滤掉所有内容。另外,我认为它对数据库的访问超出了必要的次数。
有没有办法让它在排序和过滤完好的情况下工作?或者,我需要禁用本专栏的这些功能吗?
发布于 2012-02-20 23:14:43
最后,我使用prefetchPath将任务提取到组织,然后在Linq2Objects内存查询中使用聚合,然后将结果列表传递给我的网格的数据源,这就起作用了。
发布于 2012-11-20 21:27:26
尝试为您的列使用带有中继器的模板。您可以使用数据绑定将OrgList从列传递到中继器。
如下所示:
<asp:Repeater runat="server" ID="repeater" Datasource='<%# OrgList %>'>
...https://stackoverflow.com/questions/8827101
复制相似问题