3

.NET 4 ASP.NET

我有一个 DetailsView,它显示具有链接查找表的表的实体框架记录。我有一个 asp:BoundField,其数据字段设置为“linkedTable.Field”,它显示一个值。

<asp:BoundField DataField="linkedTable.Field" HeaderText="linkedTable.Field" 
            SortExpression="linkedTable.Field" />

我试图在 asp:TemplateField 中使用该值,但是当我尝试使用它时:

<asp:TemplateField HeaderText="Field" SortExpression="linkedTable.Field" >
   <EditItemTemplate>
     <asp:Label runat="server" ID="lblField" Text='<%# Bind("linkedTable.Field") %>' />
   </EditItemTemplate>
</asp:TemplateField>

标签中没有显示任何内容。我可以将 Bind() 更改为不属于链接表的字段并且它可以工作(即“ID”字段)。我的问题是我不明白为什么linkedtable.Field 值出现在一个上下文中而不是另一个上下文中。

仅供参考,我的数据连接是 EntityDataSource

<asp:EntityDataSource ID="edsNYSEDaily" runat="server" 
    ConnectionString="name=ServerDBEntities" 
    DefaultContainerName="ServerDBEntities" EntitySetName="tblNYSE" 
    EntityTypeFilter="tblNYSE" EnableUpdate="True" EnableFlattening="true"
    AutoGenerateWhereClause="True" Select="" Where="">
    <WhereParameters>
        <asp:QueryStringParameter DefaultValue="0" Name="ID" 
            QueryStringField="ID" Type="Int32" />
    </WhereParameters>

如果您需要任何其他信息,请告诉我。我被困住了

4

1 回答 1

1

好的,发现问题:
需要添加Include="linkedTable"EntityDataSource标签中。仍然不确定为什么它甚至在<asp:DataBound />标签中工作。

答案来源:forums.asp.net

文字副本:

你应该从这里开始:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.entitydatasource.include.aspx

请注意,您将无法绑定(我的意思是双向数据绑定)相关实体(请参阅那里的注释)。

而且,您必须为这些属性使用 TemplateField。

看这个例子(我使用了 EntitySetName 的链接表 'TableAB' 并包括了另外两个):

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
        AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="EntityDataSource1">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
            <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
            <asp:BoundField DataField="IDA" HeaderText="IDA" SortExpression="IDA" />
            <asp:BoundField DataField="IDB" HeaderText="IDB" SortExpression="IDB" />
            <asp:TemplateField HeaderText="TableA Name">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("TableA.NameA") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="TableB Name">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("TableB.NameB") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=ABLinkEntities"
        DefaultContainerName="ABLinkEntities" EnableDelete="True" EnableFlattening="False"
        EnableInsert="True" EnableUpdate="True" EntitySetName="TableABs" Include="TableA,TableB">
    </asp:EntityDataSource>

您必须重新考虑更新和删除,您可以手动进行。

于 2012-03-16T16:17:11.877 回答