具有EntityDataSource的一个ASP.NET GridView中的两个相关数据库表的列

前端之家收集整理的这篇文章主要介绍了具有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)实体数据模型。
现在在我的(ASP.NET)网页上,我把一个GridView与EntityDataSource。在我的GridView中,我想显示两列:

> OrderID
>城市(属于该订单并通过AddressID-key链接)

我怎样才能做到这一点?我的问题是:当我配置实体数据源时,我可以选择一个“EntitySetName”即可
“订单”或“地址”,但不是两者,也不能选择任何种类的关系。如果我选择“Order”作为EntitySetName
那么在GridView中我可以添加

> OrderID
>地址
> Address.AddressID

添加列“地址”将显示空单元格。添加“OrderID”和“Address.AddressID”显示预期的ID。但是我怎么能
将相关地址的“City”添加到我的GridView?

谢谢你提前帮忙!

编辑:澄清:

实体框架已经创建了一个类“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相关文章