- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从 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/
我有一个 gridview,每行都有按钮: 按钮位于模板字段中: ...
我的数据源是一个列表 new { Product = p, Category = c } 我想将 DataKeyNames 设置为 Product.ID,但它说该属性不存在。 ID="grid" ru
我在我的 aspx 页面中有一个 gridview 和一个 detailview 并使用对象数据源来显示数据,表上的主键由 2 列组成,所以我在 Gridview1 中设置 DataKeyNames
我有一个从 ObjectDataSource 填充的 GridView,其 DataKeyNames 字段中有两个项目。一个是主键,ID,另一个是类别字段(类别字段用于添加标题行以划定类别)。 显示工
我有一个 gridview 绑定(bind)到一个对象列表,就像这样 List . 该对象具有子对象属性 - Address目的。 我想将 Address 对象的 PostCode 属性添加到 gri
我需要在我的 ASP.NET 应用程序 (VB.NET) 的代码隐藏中获取 DataKeyNames。我怎么能得到那个? 最佳答案 这样(VB.NET代码): For Each dkn As Str
我有一个 ListView : ... ... DeleteMethod ListView1_DeleteItem: public void Lis
如何在 C# 代码中设置 gridview 的 DataKeyNames 的值? 因为我的 gridview 是动态生成的,所以我需要从 .cs 文件中设置它 最佳答案 像这样在cs文件中写代码 Gr
他们看起来是平等的。两者都可以有多个键,并用逗号分隔。 最佳答案 两者都是不同的 datakeysname 存储主键列的名称,而 datakeys 将包含该列的值。 请参阅以下示例。 http://w
我在我的 gridview 标记(简化)中定义了以下内容: 然后我这样定义数据源的更新参数:
Use the DataKeyNames property to specify the field or fields that represent the primary key of the d
在哪些情况下我应该使用 GridView 的属性 DataKeyNames ? 为什么这里允许多列/字段? 最佳答案 Gets or sets an array that contains the n
我们有一个带有 radgrid 和一个按钮的网络表单。 radgrid 有两列和一个复选框列。 在 Page_load 上,将显示数据,用户将能够选择(通过复选框)哪些行将通过 EmpId 的更新;如
好吧,这让我今天发疯了。所以我有以下标记: 等... 假设我添加了一个标签: ' runat="server"> 这将返回正确的 DataKey“Id”。现在在 CodeBehind 中我正在执行
任何人都可以给我一个简短的片段,给定一个最初绑定(bind)到简单字符串数组的 GridView,并给定一个 GridViewRow 行,将返回绑定(bind)到该行的值? 最佳答案 不能,Syste
我有一个绑定(bind)到 asp:ObjectDataSource 的 asp:Gridview。我已经禁用了 GridView 上的 ViewState,并且没有设置 DataKeyNames 属
我是一名优秀的程序员,十分优秀!