我正在使用通过函数填充的 GridView 编写一个简单的原型前端,而不是直接链接到 SqlServer 数据源。

所以我可以从当前的网格/底层数据库中删除行/记录

  1. 设置 AutoGenerateDeleteButton = true
  2. 在第一列中显示唯一记录 ID
  3. 处理 RowDeleting 事件
  4. 通过获取grid.Rows[e.RowIndex].Cells[idIndex].Text来获取id
  5. 将该数字传递给执行删除操作的函数

这似乎工作得很好,但我不想向用户显示 id,因为它们对他们来说没有任何意义。

我尝试将 id 列的 Visible 属性设置为 false,但这导致上面的步骤 4 返回空字符串 - 因此没有删除记录。

那么如何存储每一行​​的隐藏 ID 号呢?

或者我的处理方式完全错误吗?

跟进答案:

感谢您的回答,最终采用了 Eric 的 DataKeyNames 方式。对于像我一样刚接触 ASP.NET 的其他人,我使用的步骤

  • 在我设置网格 DataSource 并调用 DataBind() 的行之间,我添加了

    grid.DataKeyNames = new string[] {"id"};

  • 然后在处理 RowDeleting 的函数中,我使用了我的 id

    grid.DataKeys[e.RowIndex].Value

有帮助吗?

解决方案

GridView 有一个 DataKeyNames 属性。当您将数据源绑定到网格时,您可以设置 DataKeyNames(通常只有一个名称,即您的 PK 字段)。您不显示 PK,但您可以从代码隐藏中获取它。

其他提示

Visible=false 表示不在页面上呈现。您想要的是将其设为模板字段并使用 HiddenField 来保存值,或者将控件上的样式设置为“显示:没有任何;”。如果客户端代码需要访问 Ajax 调用或其他内容的值,就会出现这种情况。

否则,请按照 @Eric Z Beard 建议使用 DataKeyNames 属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top