【问题标题】:How to delete a row from a GridView using non-visible data?如何使用不可见数据从 GridView 中删除一行?
【发布时间】:2010-09-17 08:15:26
【问题描述】:

我正在使用通过函数填充的 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

【问题讨论】:

    标签: c# asp.net asp.net-2.0


    【解决方案1】:

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

    【讨论】:

    • 是的,DataKeys 是要走的路。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2011-10-26
      相关资源
      最近更新 更多