使用多个表作为数据源时,如何编辑Telerik RadGrid

时间:2010-03-03 14:36:27

标签: linq telerik radgrid

我在Telerik论坛上问了这个问题而没有回复,所以我很想找你。

我之前看过这个话题,但没有回答,所以我认为我会尽可能简单地定义问题。

我有一个创建查询的LINQ命令:

var gridData =来自dc.aspnet_Users中的au                             在dc.aspnet_UsersInRoles中加入aur                             在au.UserId上等于aur.UserId                             在dc.aspnet_Roles中加入ar                             在aur.RoleId等于ar.RoleId                             加入我的dc.aspnet_Memberships
                            在au.UserId上等于am.UserId                    选择新的                    {                             au.UserName,                             ar.RoleName,                             am.Email,                             am.IsApproved,                             am.IsLockedOut                    };

重要的一点是它使用了超过1个表。

注意:这是使用标准ASP.NET成员资格框架访问角色和用户表。

然后我有一个简单的RadGrid:

<MasterTableView EditMode="InPlace"> 
   <RowIndicatorColumn> 
         <HeaderStyle Width="20px"></HeaderStyle> 
   </RowIndicatorColumn> 
   <ExpandCollapseColumn> 
         <HeaderStyle Width="20px"></HeaderStyle> 
   </ExpandCollapseColumn> 
</MasterTableView> 

最后,我将数据绑定到Page_Load

中的网格
    rgUsers.AutoGenerateColumns = true; 
    rgUsers.DataSource = gridData.ToList(); 
    rgUsers.DataBind(); 
    rgUsers.EditIndexes.Add(1); 
    rgUsers.DataBind(); 

    GridView1.AutoGenerateColumns = true; 
    GridView1.DataSource = gridData.ToList(); 
    GridView1.DataBind(); 
    GridView1.EditIndex=1;         
    GridView1.DataBind(); 

这将正确显示4个表中的数据。

我添加了一个GridView来比较功能。

我还以编程方式将网格置于编辑模式,以确保这不仅仅是编辑按钮的问题。

但是,在“编辑”模式下,RadGrid字段不可编辑。

我尝试了以下内容:

1)1)只有在LINQ查询中只有一个表时,才能使用允许编辑/更新BUT的LinqDataSource。

2)2)我可以将ObjectDataSource用于数据集,但只有在数据集适配器访问单个表时才能使用它。

我查看了variouse建议的演示和示例代码,但是他们都忽略了多表/ Join问题:

www.telerik.com/community/code-library/aspnet-ajax/grid/automatic-operations-with-linqdatasource.aspx

demos.telerik.com/aspnet-ajax/grid/examples/dataediting/threelevel/defaultcs.aspx

www.telerik.com/community/code-library/aspnet-ajax/grid/automatic-operations-with-linqdatasource.aspx

我没有和LINQ结合。我很乐意进行调整以获得可以支持更新和编辑多个表的RadGrid。

如何实现显示由多个表组成的记录的RadGrid,并且可以使用更新和编辑?

感谢您的帮助 理查德

3 个答案:

答案 0 :(得分:1)

您是否考虑过将ADO.net的dataview类与数据集类结合使用?如果这是您正在使用的数据库类型,您应该能够使用带有存储过程的system.data.sqlclient类来提取数据。您可以在数据集类中保留数据库的关系,dataview类将允许您像查看单个表一样查看数据。然后,您应该能够将dataview类绑定到Telerik控件。

答案 1 :(得分:1)

为什么不使用NeedDataSource绑定而不是DataBind()调用?因此,Telerik网格应该管理其编辑状态而无需额外编码。如果对不同的源表使用连接并使用适当的T-SQL语句设置更新或插入命令,则一切都应该正常工作。看一下这个演示的开始:

http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/extractvalues/defaultcs.aspx

迪克

答案 2 :(得分:0)

结果是LINQ查询返回一个只读的匿名类型。

我使用存储过程用SQLDataSource替换它,所以它现在可以正常工作。

由于