2

vendors テーブルと product テーブルへの外部キーを持つベンダー入札のグリッドビューがあります。

これが私のグリッドビューとデータソースです。

<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

エンティティ データソースには、テーブルの主キーが必要です。レコードを変更できます...主キーを追加した後、エンティティ データソースを右クリックし、[データベースの更新] を選択します。

于 2012-11-17T10:17:48.140 に答える
0

VendorBidsDS テーブルの主キーは「autRecNum」だけですか? 主キーと外部キーが正しく設定されているかどうか、データ ソース構成を確認できます。また、他のテーブルが更新されていない場合は、FKey の削除/更新ルールがカスケードに設定されているかどうかを確認できます。また、「 SelectedValue='<%# Bind("strProductCode") %>' 」では、「strProductCode」はデータベース列ではなくエンティティ プロパティである必要があります。それは、ずっと前の私の以前のプロジェクトから覚えているいくつかのポイントです。それがあなたを助けることを願っています。

于 2012-11-20T10:29:27.180 に答える
0

有効な主キーなしで に2保存しようとしたため、「キー プロパティ値が見つかりませんでした...」というエラーが表示されました。設定は正しく設定されており、最初の挿入は正しく実行されましEntityDataSourceた が、その後の更新は失敗しました - おそらく主キーがまだ設定されていないためです。StoreGeneratedPatternIdentity

基本的に、(DbContext を使用して) 手動で行を挿入して実行しましcontext.SaveChanges()たが、Telerik GridCommandNameがボタンの「更新」を変換して、挿入後に別の更新コマンドを実行し、このエラーが発生しました。既存の行を更新するときにはエラーは発生しないため、新しく挿入された行の主キーに関連している可能性が非常に高くなります。

この問題を解決するにCommandNameは、ボタンの を「キャンセル」に設定するだけです。手動の挿入/更新は引き続き実行されますが、グリッドは別の更新操作を試行せず、編集中の行を正しく閉じます。

于 2012-12-17T23:35:26.393 に答える