2012-11-16 52 views
2

我有一个供应商出价的网格视图,其中有供应商表和产品表的外键。asp:EntityDataSource无法更新或删除gridview

这是我的gridview和我的数据源。

<table> 
    <asp:GridView ID="GridViewVendorBids" runat="server" AutoGenerateColumns="False" 
     DataSourceID="VendorBidsDS" DataKeyNames="autRecNum" ForeColor="#333333" CellPadding="4" 
     GridLines="None" AllowPaging="True" AllowSorting="True"> 
     <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
     <Columns> 
      <asp:CommandField ShowEditButton="true" /> 
      <asp:BoundField DataField="dtmBidDate" HeaderText="Bid Date" SortExpression="dtmBidDate" 
       DataFormatString="{0:MM/dd/yyyy}" ApplyFormatInEditMode="true" /> 
      <asp:TemplateField HeaderText="Vendor Name" SortExpression="it.tblVendors.strVendorName"> 
       <ItemTemplate> 
        <asp:Label ID="lblVendorName" runat="server" Text='<%# Eval("tblVendors.strVendorName") %>' /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:DropDownList ID="ddlVendorList" runat="server" DataTextField="strVendorName" 
         DataSource='<%# getVendorList() %>' DataValueField="strVendorCode" AutoPostBack="false" 
         SelectedValue='<%# Bind("strVendorCode") %>' DropDownStyle="DropDownList" AutoCompleteMode="SuggestAppend" 
         CssClass="comboBoxInsideModalPopup" Width="250px" MaxLength="0" Style="display: inline; 
         top: 0px; left: 0px;" ItemInsertLocation="Append" RenderMode="Inline" Height="16px" /> 
       </EditItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Product Name" SortExpression="it.tblProducts.strProductName"> 
       <ItemTemplate> 
        <asp:Label ID="lblProductName" runat="server" Text='<%# Eval("tblProducts.strProductName") %>' /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:DropDownList ID="ddlProductList" runat="server" DataTextField="strProductName" 
         DataSource='<%# getProductList() %>' DataValueField="strProductCode" AutoPostBack="false" 
         SelectedValue='<%# Bind("strProductCode") %>' DropDownStyle="DropDownList" AutoCompleteMode="SuggestAppend" 
         CssClass="comboBoxInsideModalPopup" Width="300px" MaxLength="0" Style="display: inline; 
         top: 0px; left: 0px;" ItemInsertLocation="Append" RenderMode="Inline" Height="16px" /> 
       </EditItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Unit" SortExpression="it.tblProducts.strUnitDesc"> 
       <ItemTemplate> 
        <asp:Label ID="lblUnitDesc" runat="server" Text='<%# Eval("tblProducts.strUnitDesc") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="sngBid" HeaderText="Bid" SortExpression="sngBid" ItemStyle-HorizontalAlign="Right" 
       DataFormatString="{0:0.00}" /> 
      <asp:BoundField DataField="strBidType" HeaderText="Bid Type" SortExpression="strBidType" 
       ReadOnly="true" /> 
      <asp:CommandField ShowDeleteButton="true" /> 
     </Columns> 
    </asp:GridView> 
</table> 
<asp:EntityDataSource ID="VendorBidsDS" runat="server" ConnectionString="name=IMSEntities" 
    DefaultContainerName="IMSEntities" EntitySetName="tblVendorBid" Include="tblVendors,tblProducts" 
    EnableFlattening="False" OrderBy="it.dtmBidDate DESC" EnableDelete="true" EnableUpdate="true"> 
</asp:EntityDataSource> 

当我按下更新或删除键,我得到以下错误:未找到

没有关键属性值的更新期间或删除操作。检查以确保指定为绑定表达式的键属性可用于数据源。

我发现this post这与我的问题非常相似,但是当我尝试了答案时,我仍然得到相同的错误。

任何帮助表示赞赏。谢谢。

回答

0

对于实体数据源,您将需要为table.it主键允许您更改记录...添加主键后右键点击实体数据源&选择更新数据库

+0

如何给数据源一个主键? –

+0

该表已经有一个主键。 –

0

是“autRecNum”您的VendorBidsDS表的唯一主键? 您可以检查您的数据源配置是否正确设置主键和外键。如果其他表未更新,您也可以检查FKey的删除/更新规则是否设置为级联。 而在“SelectedValue ='<%#绑定(”strProductCode“)%>'”,“strProductCode”应该是实体属性而不是数据库列。 这是我很久以前从以前的项目中记得的几点。 希望它可以帮助你。

0

我得到了“找不到关键属性值...”错误,因为我试图将两次保存返回到没有有效主键的EntityDataSourceStoreGeneratedPattern设置正确设置为Identity,并且第一个插入正确运行,但后续更新失败 - 大概是因为主键尚未设置。

基本上我已经手动插入(使用的DbContext)连续跑context.SaveChanges()后来我Telerik的网译“更新”按钮插入后运行另一个更新命令的CommandName,导致该错误。更新现有行时不会发生此错误,因此很可能与新插入的行的主键相关。

要解决此问题,我只需将按钮的CommandName设置为“取消”即可。我的手动插入/更新仍在运行,但是网格不会尝试其他更新操作,并正确关闭我正在编辑的行。

+0

我试图让gridview句柄的数据源编辑和删除,但我从来没有找到解决方案并走向了不同的方向。 –

相关问题