【问题标题】:Problem with GridView, Bind() and DropDownListGridView、Bind() 和 DropDownList 的问题
【发布时间】:2011-01-18 18:08:20
【问题描述】:

我正在更新现有的 ASP .NET 站点。该站点有一个自定义网格控件类,它扩展了 GridView 控件以添加一些功能。站点中的许多页面使用内置于基本 GridView 中的内置声明式双向绑定功能,即列模板调用 Bind() 以便可以自动显示和更新数据。这在大多数情况下都可以正常工作。但是,现在在绑定 DropDownList 控件的时候就出现了问题。

最近我不得不添加一个功能,允许将某些表中的记录标记为“已关闭”,即它们不能再被插入其他表的新记录引用。

编辑具有可关闭子记录的 DropDownList 的数据网格行时,SelectedValue 属性可能绑定到列表中不存在的 ID。这会导致引发 ArgumentOutOfRange 异常。如果记录已关闭因此不在列表中,我只希望 DropDownList 默认为无选择。

我正在寻找解决此问题的最简单方法。如果可能的话,我不想对现有代码进行大量更改。

我可以在 RowDataBound 事件中以编程方式设置 DropDownList 的选定索引。但是我找不到在保留现有更新功能的同时更新值的方法。

实际问题:

有没有办法扩展 DropDownList 以使其忽略 SelectedValue 属性的无效值?到目前为止我看到的唯一例子不起作用。我认为 DropDownList 会缓存该值,以防它尚未设置其 DataSource 属性,因此覆盖 SelectedValue 属性是不够的。

或者,如果有一种方法可以使用 OnRowUpdating 事件手动将数据添加到更新中,那就没问题了。我尝试在 GridViewUpdateEventArgs 类的 NewValues 字典中添加值,但它似乎不起作用。请注意,网格绑定到对象列表,而不是 DataSourceControl 派生控件。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: asp.net data-binding gridview webforms drop-down-menu


    【解决方案1】:

    如果有人感兴趣,我想我通过重写 PerformDataBinding 方法并在那里捕获 ArgumentOutOfRangeException 解决了这个问题。我怀疑 SelectedValue 属性可能也需要被覆盖,如果这两个属性的绑定顺序可能不同的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多