ObjectDataSourceからDataKeyNamesフィールドに2つの項目を入力したGridViewがあります。1つは主キーIDで、もう1つはカテゴリフィールドです(カテゴリフィールドは、カテゴリを表すヘッダー行を追加するために使用されます)。
表示は正常に機能しますが、削除アクションを作成しようとしています。オブジェクトのdeleteメソッドはIDフィールドのみを必要とし、ObjectDataSourceでメソッドをIDフィールドのみが必要であると定義した場合でも、.netはDataKeyNamesで定義された両方のフィールドを持つメソッドを探しているため文句を言います。
カテゴリのパラメータをdeleteメソッドに追加すると機能しますが、何にも使用されないパラメータを定義するのは面倒です。
ObjectDataSourceオブジェクトとGridViewオブジェクトをDataKeyNamesの2つの値を持つように構成できますが、どちらをどのメソッドに渡すかを指定できますか?
2つのオブジェクトの(簡略化された)定義は次のとおりです。
<asp:ObjectDataSource ID="ObjDS1" runat="server" SelectMethod="getAllItems"
TypeName="Items" DeleteMethod="deleteItem">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
<!-- This shouldn't be necessary: -->
<asp:Parameter Name="Category" Type="String" />
</DeleteParameters>
</asp:ObjectDataSource>
<asp:GridView ID="gvJItems" runat="server" AutoGenerateColumns="False" DataKeyNames="ID,Category"
DataSourceID="ObjDS1">
<Columns>
<asp:BoundField DataField="ID" Visible="false" HeaderText="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="85%"/>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lbDelete" Runat="server"
OnClientClick="return confirm('Are you sure you want to delete this?');"
CommandName="Delete">Delete</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>