1

我已经在 Telerik 论坛上问过这个问题,但没有得到回复,所以我正在向你求助。

我以前看到过这个话题,但没有答案,所以我想我会尽可能简单地定义问题。

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

var gridData = from au in dc.aspnet_Users join aur in dc.aspnet_UsersInRoles
on au.UserId 等于 aur.UserId join ar in dc.aspnet_Roles
on aur.RoleId 等于 ar.RoleId join am in dc.aspnet_Memberships
on au.UserId 等于 am。 UserId 选择新的 { au.UserName, ar.RoleName, am.Email, am.IsApproved, am.IsLockedOut };

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

注意:这是使用标准 ASP.NET Membership 框架访问 Roles 和 Users 表。

然后我有一个简单的 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 查询中只有 1 个表时,我才能使用允许编辑/更新 BUT 的 LinqDataSource。

2) 2) 我可以在数据集上使用 ObjectDataSource,但是这仅在数据集适配器访问单个表时才有效。

我查看了各种建议的演示和示例代码,但它们都忽略了多表/连接问题:

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,并且更新和编辑可用?

感谢您的帮助理查德

4

3 回答 3

1

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

于 2010-03-03T14:58:19.110 回答
1

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

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

迪克

于 2010-03-03T16:53:02.410 回答
0

原来,LINQ 查询返回一个只读的匿名类型。

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

谢谢

于 2010-03-04T10:26:25.453 回答