У меня есть GridView, заполненный из ObjectDataSource двумя элементами в его поле DataKeyNames. Один - это первичный ключ, ID, другой - поле категории (поле категории используется для добавления строк заголовка для разграничения категорий).
Отображение работает нормально, но я пытаюсь создать действие Удалить. Метод удаления объекта нуждается только в поле идентификатора и в ObjectDataSource, даже если я определяю метод как требующий только поле идентификатора, .net жалуется, потому что ищет метод, в котором оба поля определены в DataKeyNames.
Это работает, если я добавляю параметр для категории в метод удаления, но досадно иметь определенный параметр, который ни для чего не используется.
Могу ли я сконфигурировать объекты ObjectDataSource и GridView, чтобы они имели два значения для DataKeyNames, но конкретные, которые должны быть переданы каким методам?
(упрощенные) определения для двух объектов:
<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>