0

关于这个问题有很多问题,但我不相信任何解决我的具体问题。我有一个可通过网格视图编辑的 EntitySet。它显示正常。但是,我有两个下拉菜单必须处理外键关系。这适用于同一页面上的表单视图以进行插入。在某一时刻,我在网格的编辑视图中进行了这项工作。

这是在 ASP.Net 3.5(实体框架 1)中。我使用了 Julie Lerman 的实体框架书(第 11 章)第 286 页中的一个示例。

我得到的错误是“Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用。”

我发现的大多数帖子都与 Eval 相关,而不是 Bind。该代码在显示模式下工作(将 Eval 放入标签中),但在切换到编辑模式时出现错误。

任何帮助,将不胜感激。让我知道我是否可以提供更多信息。

<asp:EntityDataSource
        ID="dsChargePrintMappings"
        ConnectionString="name=RateModelConnectionString"
        DefaultContainerName="RateEntities"
        EntitySetName="ChargePrintMappings"
        Include="ChargeType, BillPrintGroup"
        OrderBy="it.[EffectiveDate], it.[EffectiveEndDate]"
        EnableDelete="true"
        EnableUpdate="true"
        EnableInsert="true"
        runat="server" />

<asp:EntityDataSource
        ID="dsChargeType"
        ConnectionString="name=RateModelConnectionString"
        DefaultContainerName="RateEntities"
        EntitySetName="ChargeTypes"
        runat="server" />

    <asp:GridView
        ID="gvChargePrintMappings"
        DataSourceID="dsChargePrintMappings"
        DataKeyNames="Id"
        AutoGenerateColumns="false"
        runat="server">
        <AlternatingRowStyle CssClass="alternate" />
        <Columns>
            <asp:BoundField HeaderText="Id" ReadOnly="true" DataField="Id"
/>

            <asp:TemplateField HeaderText="Charge Type">
                <ItemTemplate>
                    <asp:Label ID="lbRate" Text='<%# Eval
("ChargeType.Description") %>' runat="server" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList
                        ID="ddChargeType"
                        DataSourceId="dsChargeType"
                        DataTextField="Description"
                        DataValueField="Id"
                        SelectedValue='<%# Bind("ChargeType.Id") %>'
                        AppendDataBoundItems="True"
                        runat="server">
                        <asp:ListItem Selected="True" Value="">(none)</asp:
ListItem>
                     </asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateField>

在页面的后面,我有一个与插入一起使用的表单视图:

<asp:FormView ID="fvRate" DataSourceID="dsForm" DefaultMode="ReadOnly"
runat="server">
        <EmptyDataTemplate>
            <asp:Button ID="btnInsert" Text="Create New" CommandName="New"
runat="server" />
        </EmptyDataTemplate>
        <InsertItemTemplate>
            <asp:Label ID="lblEffectiveDate" Text="Effective Date:"
AssociatedControlID="txtEffectiveDate" runat="server" />
            <asp:TextBox ID="txtEffectiveDate" onfocus="$(this).datepicker ()" Text='<%# Bind("EffectiveDate") %>' runat="server" /><br>

            <asp:Label ID="lblEffectiveEndDate" Text="Effective End Date:"
AssociatedControlID="txtEffectiveEndDate" runat="server" />
            <asp:TextBox ID="txtEffectiveEndDate" onfocus="$ (this).datepicker()" Text='<%# Bind("EffectiveEndDate") %>' runat="server"
/><br>

            <asp:Label ID="lblChargeType" Text="Charge Type:"
AssociatedControlID="ddChargeType" runat="server" />
            <asp:DropDownList
                ID="ddChargeType"
                DataSourceId="dsChargeType"
                DataTextField="Description"
                DataValueField="Id"
                SelectedValue='<%# Bind("ChargeType.Id") %>'
                AppendDataBoundItems="True"
                runat="server">
                <asp:ListItem Selected="True" Value="">(none)</asp:ListItem
>
             </asp:DropDownList><br>

            <asp:Label ID="lblBillPrintGroup" Text="Bill Print Group:"
AssociatedControlID="ddBillPrintGroup" runat="server" />
            <asp:DropDownList
                ID="ddBillPrintGroup"
                DataSourceId="dsBillPrintGroup"
                DataTextField="Description"
                DataValueField="Id"
                SelectedValue='<%# Bind("BillPrintGroup.Id") %>'
                AppendDataBoundItems="True"
                runat="server">
                <asp:ListItem Selected="True" Value="">(none)</asp:ListItem
>
             </asp:DropDownList><br>


            <asp:Button ID="btnInsert" CommandName="Insert" Text="Create"
runat="server" />
            <asp:Button ID="btnCancelUpdate" CommandName="Cancel" Text ="Cancel" runat="server" />
        </InsertItemTemplate>
    </asp:FormView>
4

2 回答 2

1

在回答中重新创建我的评论,以便我可以格式化:仅供参考,我打开了该书中的相关示例(第一版和示例是 3.5,因此使用 VS2008 运行它)。我在使用的下拉列表中编辑和保存值没有问题:

<asp:TemplateField HeaderText="PrimaryActivity" SortExpression="PrimaryActivity">
  <EditItemTemplate>
    <asp:DropDownList runat="server" ID="act1DDL" 
         DataTextField="ActivityName" 
         DataValueField="ActivityID" 
         DataSourceID="EntityDataSource5" 
         AppendDataBoundItems="True" 
         SelectedValue='<%# Bind("PrimaryActivity.ActivityID") %>'>
        <asp:ListItem Value="">*</asp:ListItem>
     </asp:DropDownList>
  </EditItemTemplate>
  <ItemTemplate>
      <asp:Label ID="Label1" runat="server" 
                 Text='<%# Bind("PrimaryActivity.ActivityName") %>'></asp:Label>
  </ItemTemplate>
</asp:TemplateField>

我知道“在我的电脑上工作”并没有太大帮助,但还有其他事情正在发生。也许我通过推特发给你的那个链接可能有用?

http://aspadvice.com/blogs

于 2012-01-10T17:04:00.937 回答
0

事实证明,绑定到 Grid 的 FormView(以及它的 DataSource)导致了这个问题。我留下了来自 GridView 的 SelectedValue 的 Id 参数,但由于 GridView 是可编辑的,因此尝试以两种可编辑方式绑定记录时遇到问题。

具体来说,我需要从 GridView 中删除 DataKeyNames 属性,以及 FormView DataSource 中引用 GridView 的所有参数。

由于 FormView 仅用于插入,因此需要将其设为默认模式,以便可见。当没有绑定到 GridView 时, EmptyItemTemplate 不可见,因此我使用按钮和 jquery-ui 来隐藏和显示 formview(始终处于插入模式)。

于 2012-01-17T20:50:13.670 回答