gpt4 book ai didi

c# - 如何动态地将列添加到 RadGrid?

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:14 25 4
gpt4 key购买 nike

我有一个 RadGrid,其中我想创建的列数未知。其实我知道第一列,它有一个数据字段PermissionName。我有一个 CSLA 数据源,它返回一个 PermissionInfo 对象列表,每个对象都包含一个 RoleInfo 对象列表。当 PermissionInfo 对象具有不同数量的 RoleInfo 对象时,如何在 RadGrid 中为每个 RoleInfo 对象动态创建一个列?

如果 任何 PermissionInfo 对象包含特定的 RoleInfo 对象,我想创建一个列,其中 RoleInfo.RoleName 作为标题,True 作为 DataValue。如果 RoleInfo 对象不存在,那么我希望该行和列的 DataValue = false。

这是我的 RadGrid:

    <telerik:RadGrid ID="rgPermissions" AllowPaging="false" AllowSorting="true" AutoGenerateColumns="false"
DataSourceID="dsPermissions" runat="server">
<MasterTableView DataKeyNames="PermissionId" DataSourceID="dsPermissions" EditMode="InPlace">
<Columns>
<telerik:GridBoundColumn DataField="PermissionName" HeaderText="Permission" ></telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
<csla:CslaDataSource ID="dsPermissions" runat="server" OnSelectObject="dsPermissions_SelectObject">
</csla:CslaDataSource>

这是 PermissionInfo 中的属性

    public int PermissionId { get; set; }

public string PermissionName { get; set; }

public RoleInfoList Roles { get; set; }

以下是 RoleInfo 中的属性:

    public int RoleId { get; set; }

public string RoleName { get; set; }

public string Title { get; set; }

在我的page_load 方法中,我还编写了一个工厂方法来检索所有角色:

RoleInfoList roles = RoleInfoList.GetRoleList();

最佳答案

有几种方法;首先,您可以使用 Telerik 原生支持的分层网格方法 (see this topic and subtopics)。或者,您可以通过执行 LINQ 语句“展平”您尝试绑定(bind)的结果,然后绑定(bind)匿名结果。

var p in permissions
select new
{
p.PermissionId,
p.PermissionName,
RolesList = String.Join(", ", p.Roles.Select(i => i.RoleName))
}

请注意,此方法对 LINQ 不友好,因为 Join 未转换为 LINQ。

关于c# - 如何动态地将列添加到 RadGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772418/

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