【问题标题】:ASP.NET - Detect Changed Values in a Repeater?ASP.NET - 检测中继器中的更改值?
【发布时间】:2012-02-20 14:43:06
【问题描述】:

早安,

我有一个带有中继器的页面。中继器通常包含 250 - 500 行。

ItemTemplate 包含 5 个 TextBox 控件和 1 个 DropDownList。用户可以修改任何这些值。

修改一个或多个值(一行或多行)后,用户将单击“保存”按钮。此时我想更新数据库——但首先我需要识别已更改的行。

我已经尝试过 TextBox.TextChange 事件……但我每行有 5 个 TextBox 控件……我不想将同一个项目更新五次……所以我正在寻找更好的东西。

如果有一个 RepeaterItem.SomeValueChanged 事件那就太好了……但到目前为止我还没有找到一个! :-)

谁有更“优雅”的解决方案?

谢谢!

格伦

【问题讨论】:

  • 如果您使用GridView 而不是默认包含的Repeater 控件...
  • @balexandre,你确定吗?
  • @balexandre -- 我确信还有其他(也许更好)方法可以实现这一点(将来我们可能会尝试 DataGridView)但现在我正在寻找一种方法来实现这一点使用中继器。谢谢!
  • @Adrian -- 这正是我现在正在做的: foreach (RepeaterItem rptItem in rptListItems.Items) { TextBox txtQuantity = (TextBox)rptItm.FindControl("txtQuantity"); HiddenField hidQuantity = (HiddenField)rptItm.FindControl("hidQuantity"); if (string.Compare(txtQuantity.Text.Trim(), hidQuantity.Value.Trim(), true) != 0) { // value has changed
  • @Adrian Iftode - 我将坚持我现在所拥有的 - 主要是因为我的时间很短,需要快速完成这个项目。希望我们能尽快迁移到 .NET 4.0,我将深入研究 LINQ!谢谢你的帮助!!我真的很感激!

标签: asp.net .net-2.0 repeater


【解决方案1】:

有一个隐藏字段来反映一个值,该值会告诉您某些事情发生了变化。在初始数据绑定时,将其值设置为 0。为文本框连接一些 js,以便它们将隐藏字段更新为 1。然后在 btn 保存事件中,您只需要对那些具有 1 的项目感兴趣。

【讨论】:

  • 我实际上需要比较每个控件(TextBox/DropDownList)的 BEFORE 和 AFTER 值......所以这对我不起作用。但是,我没有在原始问题中明确说明(我应该有),我认为你的建议很有意义,所以我将你的建议标记为“已接受”的答案。感谢您花时间阅读我的问题并提供解决方案!
  • 这可能是个坏主意,但是您可以将 List 存储在视图状态中。 T 类应标记为可序列化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多