关于这个问题有很多问题,但我不认为有任何问题可以解决我的具体问题。我有一个可以通过网格视图编辑的EntitySet。它显示得很好。然而,我有两个下拉列表,它们必然会处理外键关系。这在同一页上的表单视图中可以进行插入。有一次,我在网格的"编辑"视图中进行了此操作。
这是在ASP.Net 3.5(实体框架1)中。我使用了Julie Lerman的实体框架书(Ch 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>
在回答中重新创建我的注释,以便我可以格式化:仅供参考,我打开了那本书中的相关样本(第一版和样本是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
事实证明,绑定到网格的FormView(及其DataSource)导致了问题。我留下了来自GridView的SelectedValue的Id参数,但由于GridView是可编辑的,它在尝试以两种可编辑的方式绑定记录时遇到了问题。
具体来说,我需要从GridView中删除DataKeyNames属性,以及FormView DataSource中引用GridView的任何参数。
由于FormView当时只用于插入,因此这需要是默认模式,以便它可见。当没有绑定到GridView时,EmptyItemTemplate是不可见的,所以我使用了一个按钮和jquery ui来隐藏和显示表单视图(它总是处于插入模式)。