加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – GridView中的多个DataKeyNames

发布时间:2020-12-16 04:11:34 所属栏目:asp.Net 来源:网络整理
导读:我有一个从ObjectDataSource填充的GridView,其DataKeyNames字段中有两个项目.一个是主键,ID,另一个是类别字段(类别字段用于添加标题行以描述类别). 显示工作正常,但我正在尝试创建删除操作.对象的delete方法只需要ID字段,而在ObjectDataSource中,即使我将方
我有一个从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方法中看到的副作用.

要回答您的原始问题,不,您不能将Data包含在DataKeyNames中而不将其传递给Delete方法.但是,您可以通过将值放在模板列中的隐藏输入中来维护ViewState中的值.但是,获取该值比忽略Delete方法的参数更有意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读