【发布时间】:2008-11-28 17:07:17
【问题描述】:
我有一个从 ObjectDataSource 填充的 GridView,它的 DataKeyNames 字段中有两个项目。一个是主键,ID,一个是类别字段(类别字段用于添加标题行来划分类别)。
显示工作正常,但我正在尝试创建删除操作。对象的删除方法只需要 ID 字段,并且在 ObjectDataSource 中,即使我将该方法定义为只需要一个 ID 字段,.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>
【问题讨论】: