我在Telerik论坛上问了这个问题而没有回复,所以我想给你 .
我之前看到过这个话题,但没有回答,所以我认为我会尽可能简单地定义问题 .
我有一个LINQ命令创建一个查询:
var gridData =来自dc.aspnet_Users中的au在dc.aspnet_UsersInRoles中加入aur
on au.UserId等于在dc.aspnet_Roles中的aur.UserId join ar
在aur.RoleId等于ar.RoleId加入am在dc.aspnet_Memberships
on au.UserId等于am.UserId选择new {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)我可以使用LinqDataSource,只有在LINQ查询中只有一个表时才允许编辑/更新BUT .
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,它显示由多个表组成的记录,并且可以使用Update和Edit?
谢谢你理查德的任何帮助
3 回答
为什么不使用NeedDataSource绑定而不是DataBind()调用?因此,Telerik网格应该管理其编辑状态而无需额外编码 . 如果对不同的源表使用连接并使用适当的T-SQL语句设置更新或插入命令,则一切都应该正常工作 . 看看这个演示的开始:
http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/extractvalues/defaultcs.aspx
迪克
原来LINQ查询返回一个只读的匿名类型 .
我使用存储过程将其替换为SQLDataSource,因此它现在可以正常工作 .
谢谢
您是否考虑过将ADO.net的dataview类与数据集类结合使用?如果这是您正在使用的数据库类型,您应该能够使用带有存储过程的system.data.sqlclient类来提取数据 . 您可以在数据集类中保留数据库的关系,dataview类将允许您像查看单个表一样查看数据 . 然后,您应该能够将dataview类绑定到Telerik控件 .