【问题标题】:How to programmatically change the gridview row in EDIT mode not based on the row number如何在编辑模式下不基于行号以编程方式更改 gridview 行
【发布时间】:2014-01-15 19:38:35
【问题描述】:

我正在寻找一种方法来根据数据的主键而不是基于在 gridview 上单击的行号在 EDIT 模式下更改 asp.net gridview 行。

有哪些选择。

【问题讨论】:

  • 我尝试了如下代码,但没有帮助。 protected void Row_Editing(object sender, GridViewEditArgs e) { myGridView.EditItemIndex = e.EditItemIndex;绑定数据();以上是基于gridview的行索引,但我想根据gridview的主键数据绑定列设置编辑模式。原因是,虽然单击 EDIT 按钮让我检查了第 2 行,但由于 Edit 本身执行回发并刷新数据库中的数据,因此 #2 可能没有其他一些数据被删除以进行编辑。

标签: asp.net gridview row edit mode


【解决方案1】:

我可能在包含 PK 的 GridView 中有一个隐藏列。单击编辑按钮时,您可以使用适当的处理程序从该行获取 PK 并根据需要对其进行操作。

更新:看了你的评论后,并不是你无法获得PK,而是在点击按钮和重​​新渲染gridview为可编辑之间数据已经刷新。在您的场景中,用户可以单击第三行进行编辑,然后它突然变成第七行,因为其他用户已经插入了四行。

简单的答案是不要那样做!一方面,这会让你的生活变得更加艰难;2)如果用户单击第三行进行编辑,然后突然出现在屏幕上的第七行,这会让用户感到困惑。

如果出于某种原因您必须刷新数据,请在用户提交更改后执行。如果您需要刷新数据以确保其他用户在用户更新它们之前没有编辑这些值,那么您将不得不找到另一个解决方案。也许父/详细屏幕会起作用或添加一个弹出窗口,说明数据已更改。 (请记住,如果值突然改变而没有警告用户也会感到困惑。)

【讨论】:

  • 我已经在 gridview 中设置了 DataKeyNames 和数据的主键,并使用在处理程序 GridView1_RowEditing 中单击编辑的行的 DataKey 来获取它,但是无论行索引设置编辑模式总是显示我最初单击的行编辑。我面临一个问题,即通过数据库更新(添加或删除行),并且由于单击编辑会回发并刷新gridview上的数据,因此它可能会更改我之前单击的数据的行号,并且编辑模式会根据行号发生我点击它并显示错误行的编辑模式
  • 感谢您的及时回复!在我的场景中,数据永远不会更新,只会在数据库中插入或删除行。目前,我在 HTML 中有用于 gridview 的选择命令,即使我没有在回发中刷新数据,它仍然会在编辑时执行它...我想这是因为我有用于 gridview 的选择命令...我想我应该以编程方式绑定数据,然后控制回发编辑点击。
  • 不,如果行被删除(或者如果 PK 不是自动递增值),您仍然会遇到同样的问题。
  • 如果后台没有更新,取消刷新,你应该没问题。我喜欢编写我的选择语句,而不是将它们绑定到命令,这样我就可以更好地控制它,但无论如何都要发布你的代码 - 我们可能有一个简单的修复
  • 我相信你的建议如下......但没有运气。编辑单击仍然采用我单击的行号。 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } 受保护的无效 GridView1_RowEditing(对象发送者,GridViewEditEventArgs e){ GridView1.EditIndex = e.NewEditIndex;绑定数据(); }
猜你喜欢
  • 2010-09-17
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多