首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将列动态添加到RadGrid中?

如何将列动态添加到RadGrid中?
EN

Stack Overflow用户
提问于 2013-11-04 08:35:39
回答 2查看 9.8K关注 0票数 2

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

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

这是我的RadGrid:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <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中的属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public int PermissionId { get; set; }

    public string PermissionName { get; set; }

    public RoleInfoList Roles { get; set; }

以下是RoleInfo中的属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public int RoleId { get; set; }

    public string RoleName { get; set; }

    public string Title { get; set; }

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RoleInfoList roles = RoleInfoList.GetRoleList();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-06 09:15:16

下面是我最后所做的:我最终放弃了CSLA数据源,而只是简单地绑定了一个DataTable。在创建额外的列时,我从我的GridBoundColumn中删除了静态RadGrid,并调用了OnNeedDataSource事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<telerik:RadGrid ID="rgPermissions" AllowPaging="false" AllowSorting="true" OnNeedDataSource="rgPermissions_NeedDataSource"
    runat="server">
    <MasterTableView DataKeyNames="Permission Name" AutoGenerateColumns="true" EditMode="InPlace">
        <Columns>
            <telerik:GridEditCommandColumn />
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

然后我填写了我的事件处理程序,使用CSLA工厂方法创建DataTable:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void rgPermissions_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    // Data Access
    PermissionInfoList permissions = PermissionInfoList.GetPermissionInfoList();
    RoleInfoList roles = RoleInfoList.GetRoleList();

    // create datatable for permissions
    DataTable permissionTable = CreatePermissionDataTable(roles);
    foreach (PermissionInfo permission in permissions)
    {
        // Add permission name
        DataRow dataRow = permissionTable.NewRow();
        dataRow["Permission Name"] = permission.PermissionName;

        AddRow(permission, permissionTable, dataRow, roles);
    }

    rgPermissions.DataSource = permissionTable;
}

我为权限数据创建了一个DataTable:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private DataTable CreatePermissionDataTable(RoleInfoList roles)
{
    DataTable permissions = new DataTable();
    permissions.Columns.Add("Permission Name", typeof(string));
    permissions.Columns["Permission Name"].ReadOnly = true;
    foreach (RoleInfo role in roles)
    {
        permissions.Columns.Add(role.Title, typeof(Boolean));
    }
    return permissions;
}

我确实使用LINQ从角色数据中筛选出权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private DataTable AddRow(PermissionInfo permission, DataTable permissions, DataRow dataRow, RoleInfoList roles)
{

    // Add roles
    foreach (RoleInfo role in roles)
    {
        dataRow[role.Title] = permission.Roles.Any(r => r.RoleId == role.RoleId);
    }
    permissions.Rows.Add(dataRow);

    return permissions;
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-04 09:04:24

有几种方法;首先,您可以使用分层网格方法,Telerik本机支持这种方法(请参阅本主题和副主题。)。或者,您可以通过执行LINQ语句“平平”要绑定的结果,然后绑定匿名结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var p in permissions
select new
{
    p.PermissionId,
    p.PermissionName,
    RolesList = String.Join(", ", p.Roles.Select(i => i.RoleName))
}

注意,这种方法不是LINQ友好的,因为联接没有被翻译成LINQ。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19772418

复制
相关文章
如何将HTML字符转换为DOM节点并动态添加到文档中
将字符串动态转换为DOM节点,在开发中经常遇到,尤其在模板引擎中更是不可或缺的技术。 字符串转换为DOM节点本身并不难,本篇文章主要涉及两个主题:<br />
用户1631416
2018/09/14
7.6K0
如何将HTML字符转换为DOM节点并动态添加到文档中
在 Debian 中如何将用户添加到 Sudoers
sudo是一个命令行工具,它允许被信任用户以另外一个用户身份运行命令,默认是 root 用户。
雪梦科技
2020/05/11
12.6K0
在 Debian 中如何将用户添加到 Sudoers
在 Ubuntu 中如何将用户添加到 Sudoers
sudo是一个命令行程序,它允许被信任的用户以 root 或者其他用户身份去运行命令。
雪梦科技
2020/05/09
34.4K0
在 Ubuntu 中如何将用户添加到 Sudoers
Nexus高级配置之如何将本地jar添加到Nexus中
Java后端技术所推送文章,为本人原创、网上收集或其他作者投稿,对于网上收集部分除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!^_^ QQ:1573876303。
Java后端技术
2018/08/09
2.7K0
Nexus高级配置之如何将本地jar添加到Nexus中
如何将MV中的音频添加到EasyNVR中做直播背景音乐?
EasyNVR已经支持自定义上传音频文件,可以做慢直播场景使用,前两天有一个开发者提出一个问题:想把一个MV中的音频拿出来放到EasyNVR中去做慢直播。
EasyNVR
2021/10/28
4.1K0
如何将MV中的音频添加到EasyNVR中做直播背景音乐?
如何将WebRTC播放协议添加到EasyCVR?
自2020年浏览器的发展和兼容性发生了变化,WebRTC的延时性、安全性得到了提升和保护,尤其是疫情爆发后,实时视频的需求比之前增长了30倍,这更刺激了WebRTC产品的持续快速发展。因此我们也在EasyGBS、EasyDSS等平台内实现了WebRTC协议的播放。
TSINGSEE青犀视频
2021/11/23
1.4K0
在Oracle中,如何将一个数据库添加到CRS中?
虽然通过DBCA(DataBase Configuration Assistant,数据库配置助手)创建的数据库会自动加入CRS中,但通过RMAN创建的数据库是不会被加入CRS中的,在这种情况下就需要手动添加,将数据库加入CRS中后就可以通过srvctl来管理数据库了。
AiDBA宝典
2023/04/26
2.7K0
在Oracle中,如何将一个数据库添加到CRS中?
在 CentOS 上如何将用户添加到 Sudoers
sudo是一个命令行工具,它被设计为允许用户以其他用户(默认是 root 用户)身份去运行命令。
雪梦科技
2020/05/11
11.5K0
在 CentOS 上如何将用户添加到 Sudoers
MySql中应该如何将多行数据转为多列数据
在 MySQL 中,将多行数据转为多列数据一般可以通过使用 PIVOT(也称为旋转表格)操作来实现。但是,MySQL 并没有提供原生的 PIVOT 操作。不过,可以使用 MySQL 的 GROUP BY 和 CASE WHEN 语句来自定义实现。
用户1289394
2023/08/22
1.9K0
MySql中应该如何将多行数据转为多列数据
根据数据源字段动态设置报表中的列数量以及列宽度
在报表系统中,我们通常会有这样的需求,就是由用户来决定报表中需要显示的数据,比如数据源中共有八列数据,用户可以自己选择在报表中显示哪些列,并且能够自动调整列的宽度,已铺满整个页面。本文就讲解一下Act
葡萄城控件
2018/01/10
4.9K0
根据数据源字段动态设置报表中的列数量以及列宽度
zabbix 5.0如何将esxi6.7添加到监控
今天有个需求,需要将一台esxi 6.7 server添加到我们的zabbix监控服务器上,将我做的操作踩的一点坑写出来
姚华
2022/06/29
1.8K0
zabbix 5.0如何将esxi6.7添加到监控
xtraReprot 动态绑定数据 数据列动态
我要做的报表模板要求是传入一个DataTble,不管datatable的列数多少,计算列宽后显示报表
乔达摩@嘿
2020/09/10
1.6K0
如何将用户添加到Linux桌面【Linux-Command line】
我在 useradd command 上发布的文章阐述了对Linux系统用户管理的深层理解。Useradd 是一个命令行工具,但你也可以在Linux上通过图形方式管理用户。这就是本文主旨。
QRosie
2019/11/12
4.8K0
如何将用户添加到Linux桌面【Linux-Command line】
如何将Alexa添加到Raspberry Pi(或任何Linux设备)
我们的Amazon Alexa虚拟设备项目旨在提供将Alexa添加到任何Linux设备(包括Raspberry Pi板等嵌入式系统)的功能。
用户4122690
2020/03/14
1.5K0
如何将Alexa添加到Raspberry Pi(或任何Linux设备)
ElementUI table表格列动态渲染
一般写table时,列都是固定。现有业务需求,列是不固定的。根据api返回的数据,进行动态渲染。
py3study
2021/04/28
7.2K0
ElementUI table表格列动态渲染
如何将html格式动态图表网页嵌入ppt中
前几天魔方学院(其实就是我的公众号交流群啦~_~)的一位群友突然在群里提了一个问题! 看了之前推送的REmap相关内容,结果导出的图表是html格式的动态图,不知道如何将此种格式的图表放在ppt中使用。 这确实很尴尬他呀,你不能直接拿着Rstudio跟客户演示呀(而且还不保证每一台PC上都安装有R语言软件),如果是ppt展示,突然退出来,然后用浏览器打开html文件也是够突兀的。 当然这个情况在r语言中其实很普遍,很多依赖底层js语言编写的二次开发包(比如R语言中的recharts、RERmap、Rchar
数据小磨坊
2018/04/11
34K2
如何将html格式动态图表网页嵌入ppt中
如何将文章列表用<li>分两列显示
  我们平时用ul或ol标签来罗列文章列表时默认是一列,为了美观起见,想把它们两列显示要如何操作呢?怎么用css定义它们?   其实相对比较简单,用几行css样式定义一下就够了,可以用div + css来控制 <style type="text/css"> .ytkah{ width:300px; height:74px; float:left;} .ytkah ul{ width:280px;} .ytkah li{ width:100px; float:left; display:block;} </s
ytkah
2018/03/06
1.9K0
GreenPlum AOCO列存如何将数据刷写磁盘
AOCO列存表每个字段一个文件,前面我们介绍了列存表如何加载数据页,本文我们重点介绍AOCO表如何进行刷写。AOCO表进行insert、update、delete会产生脏数据,和heap表的异步脏页刷写不同,AOCO表的数据时同步刷写的。也就是在AOCO表向datum_buffer放入数据后,立即将其从datum_buffer写入largeWriteMemory,最后将数据从largeWriteMemory写入磁盘。
yzsDBA
2023/02/26
6170
GreenPlum AOCO列存如何将数据刷写磁盘
点击加载更多

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文