gpt4 book ai didi

asp.net - GridView 中的多个 DataKeyNames

转载 作者:行者123 更新时间:2023-12-04 10:59:35 31 4
gpt4 key购买 nike

我有一个从 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>

最佳答案

所有 DataKey 值将始终传递给 Delete 方法,因为 DataKeyNames 命名的字段旨在成为在 GridView 中唯一标识该项目的一个或多个字段。它们通常用于在 ViewState 中按行轻松维护额外字段,就像您在这里一样,但这样做会产生副作用,就像您在 ObjectDataSource 方法中看到的那样。

要回答您最初的问题,不,您不能在没有将 Category 传递给 Delete 方法的情况下将其放在 DataKeyNames 中。不过,您可以通过将值放在模板列中的隐藏输入中来维护 ViewState 中的值。不过,与忽略 Delete 方法的参数相比,获取该值会更费力。

关于asp.net - GridView 中的多个 DataKeyNames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326233/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com