2

我有一个供应商投标的网格视图,其中包含供应商表和产品表的外键。

这是我的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>

当我按下更新或删除键时,出现以下错误:

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

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

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

4

3 回答 3

0

Is "autRecNum" the only primary key of your VendorBidsDS Table? You may check your Data Source Configuration whether primary key and foreign key are set properly. Also you may check if the Delete/Update Rule for FKey is set to Cascade if the other table is not updated. And in " SelectedValue='<%# Bind("strProductCode") %>' ", "strProductCode" should be entity property instead of database column. That's the few points I can remember from my previous project long long time ago. Hope it can help you.

于 2012-11-20T10:29:27.180 回答
0

对于实体数据源,您需要表的主键。它允许您更改记录...添加主键后,右键单击实体数据源并选择更新数据库

于 2012-11-17T10:17:48.140 回答
0

我收到“未找到键属性值...”错误,因为我试图将两次保存回EntityDataSource没有有效主键的位置。StoreGeneratedPattern设置正确设置为并且第 Identity一个插入正确运行但是后续更新失败 - 可能是因为尚未设置主键。

基本上我手动插入了一行(使用 DbContext)并运行context.SaveChanges(),但后来我的 Telerik Grid 翻译CommandName了按钮的“更新”以在插入后运行另一个更新命令,导致此错误。更新现有行时不会出现该错误,因此它很可能与新插入行的主键有关。

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

于 2012-12-17T23:35:26.393 回答