我有一个从ObjectDataSource填充的GridView,其DataKeyNames字段中有两个项目.一个是主键,ID,另一个是类别字段(类别字段用于添加标题行以描述类别).
显示工作正常,但我正在尝试创建删除操作.对象的delete方法只需要ID字段,而在ObjectDataSource中,即使我将方法定义为只需要一个ID字段,.net也会抱怨,因为它正在寻找一个同时具有DataKeyNames中定义的字段的方法.
如果我将类别的参数添加到delete方法,它可以工作,但是定义一个不用于任何东西的参数很烦人.
我可以将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>