我有供应商出价的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 :(得分:0)
对于实体数据源,您需要一个table.it的主键,允许您更改记录...添加主键后,右键单击实体数据源&amp;选择更新数据库
答案 1 :(得分:0)
“autRecNum”是VendorBidsDS表的唯一主键吗? 您可以检查数据源配置是否正确设置了主键和外键。如果另一个表未更新,您也可以检查FKey的删除/更新规则是否设置为Cascade。 并在“SelectedValue ='&lt;%#Bind(”strProductCode“)%&gt;' “,”strProductCode“应该是实体属性而不是数据库列。 这是我很久以前从我以前的项目中记住的几点。 希望它可以帮到你。
答案 2 :(得分:0)
我收到了“未找到关键属性值...”错误,因为我试图将两次保存回EntityDataSource
而没有有效的主键。 StoreGeneratedPattern
设置已正确设置为Identity
,并且第一个Insert正确运行,但后续更新失败 - 可能是因为尚未设置主键。
基本上我手动插入一行(使用DbContext)并运行context.SaveChanges()
但是我的Telerik Grid翻译了按钮的“更新”CommandName
以运行另一个更新插入后命令,导致此错误。更新现有行时不会发生错误,因此很可能与新插入的行的主键相关。
要解决此问题,我只需将按钮的CommandName
设置为“取消”即可。我的手动插入/更新仍然运行,但网格不会尝试其他更新操作并正确关闭我正在编辑的行。