gpt4 book ai didi

c# - 如何在 ASPxGridView 的一个单元格中聚合一组项目

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:51 26 4
gpt4 key购买 nike

我使用的是 ASP.NET 3.5、LLBLGenPro 3.0 和 DevExpress 10.1.7。我有一个带有 LinqServerModeDataSource 的 ASPxGridView。 ASPxGridView 的每一行都对应于 LLBLGenPro 中的一个 TaskEntity。 TaskEntity 的属性之一是 OrganizationCollection,它是相关 OrganizationEntities 的集合。我想做的是在 ASPxGridView 中添加一个名为 OrgList 的列,它将按名称显示相关组织的列表(最好在 <br> 分隔的列表中,因此每个项目都在其自己的行中,但是列表将全部在同一个单元格中,如果该列的 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 提供程序不支持‘聚合’。请尝试使用受支持的方法重写查询。”

然后,我尝试了:

OrgList = String.Join("<br>", task.OrganizationCollection.Select(x => x.OrgName).ToArray())

这给了我以下 ORMException:“对‘Join’的方法调用没有已知的映射数据库函数或其他已知的处理程序。”

唯一有用的是:

OrgList = GetOrgList(task.Id)

然后定义 GetOrgList()方法,它采用任务 ID 并以我想要的格式构建列表,并将其作为字符串返回。这实际上确实按照我想要的方式显示了网格中的数据,但缺点是当您尝试对此列进行排序时它无法正常工作,而当您尝试使用自动筛选器在此列上进行筛选时它只会进行筛选一切都出来了,不管。另外,我想它比必要的多了几次访问数据库。

有什么方法可以让它在排序和过滤的情况下正常工作吗?或者我是否需要为此专栏禁用这些功能?

最佳答案

尝试为您的专栏使用带有转发器的模板。您可以使用数据绑定(bind)将 OrgList 从列传递到转发器。

像这样:

<asp:Repeater runat="server" ID="repeater" Datasource='<%# OrgList %>'>
...

关于c# - 如何在 ASPxGridView 的一个单元格中聚合一组项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com