具有EntityDataSource的一个ASP.NET GridView中的两个相关数据库
我有两个SQL Server表与主键(PK)和外键(FK)链接两个表:
1) Table "Order" OrderID,int,PK AddressID,FK ... 2) Table "Address" AddressID,PK City,nvarchar(50) ... 然后我从这两个表中创建了一个(ADO.NET)实体数据模型。 > OrderID 我怎样才能做到这一点?我的问题是:当我配置实体数据源时,我可以选择一个“EntitySetName”即可 > OrderID 添加列“地址”将显示空单元格。添加“OrderID”和“Address.AddressID”显示预期的ID。但是我怎么能 谢谢你提前帮忙! 编辑:澄清: 实体框架已经创建了一个类“Order”和一个对应于数据库表的“Address”类。 “订单”类引用“地址”对象作为导航属性,对应于地址和订单表之间的1-n关系。 基本上我想在我的GridView中显示一个列,显示Order.Address.City。我已经尝试添加一个绑定字段“Address.City”作为数据字段到GridView,但它会导致运行时错误(“没有这样的属性…”)。 解决方法
好的,太多小时后我自己找到了解决方案:
选项1: 可以使用EntityDataSource中的select属性,允许从几个相关实体/数据库表创建任意数据的投影(在我的情况下:OrderID从Order实体和City从 缺点:使用EntityDataSource中的select使GridView中的Insert,Update和Delete不可能! 选项二: EntityDataSource必须具有include属性,以包括相关的地址属性以及查询的订单。标记看起来像这样: <asp:EntityDataSource ID="EntityDataSourceOrders" runat="server" ConnectionString="name=MyEntitiesContext" DefaultContainerName="MyEntitiesContext" EntitySetName="Order" Include="Address" EnableDelete="True" EnableInsert="True" EnableUpdate="True"> </asp:EntityDataSource> 然后GridView的列集合可以有一个模板字段,如下所示: <asp:TemplateField HeaderText="City" > <ItemTemplate> <asp:Label ID="LabelCity" runat="server" Text='<%# Eval("Address.City") %>'> </asp:Label> </ItemTemplate> </asp:TemplateField> 这里Eval很重要。绑定不起作用还使用BoundField作为列… <asp:BoundField DataField="Address.City" HeaderText="City" /> … 不可能。所以在GridView中编辑城市是不可能的(这是有道理的,因为它的一个相关领域属??于另一个表,也许是许多其他的命令)。但是可以编辑订单实体的平面字段以及订单的“AddressID”来分配另一个地址。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET Core 2.0 / Angular模板应用程序上发布失败
- ASP.NET实现的简单易用文件上传类
- 使用ASP.NET(C#)在不使用QueryString的情况下将变量从页面传
- asp.net – 无法加载类型’System.ServiceModel.Activation
- asp.net – 将TemplateField的可见性绑定到BoundField的内容
- asp.net-mvc – Knockout.js&复选框列表:发布到mvc控制
- asp.net-mvc – Steve Sanderson的BeginCollectionItem帮助
- 详解ASP.NET Core 中的框架级依赖注入
- asp.net-membership – 使用SQL提供程序获取ASP.NET成员资格
- ASP.Net MVC MvcBuildViews大大增加了编译时间