我正在更新现有的ASP .NET站点。该站点有一个自定义网格控件类,它扩展了GridView控件以添加一些功能。站点中的许多页面使用内置的声明性双向绑定功能,该功能内置于基本GridView中,即列模板调用Bind(),以便可以自动显示和更新数据。在大多数情况下,这样做很好。但是,当绑定DropDownList控件时,现在存在问题。
最近我不得不添加一项功能,允许某些表中的记录标记为“已关闭”,即插入其他表的新记录不能再引用它们。
编辑具有可以关闭的子记录的DropDownList的数据网格行时,SelectedValue属性可能绑定到列表中不存在的ID。这会导致抛出ArgumentOutOfRange异常。我只是希望DropDownList在记录关闭时默认为无选择,因此不在列表中。
我正在寻找解决这个问题的最简单方法。如果可能,我不想对现有代码进行大量更改。
我可以在RowDataBound事件中以编程方式设置DropDownList的选定索引。但我无法找到更新价值的方法,同时保持现有的更新功能。
实际问题:
是否有某种方法可以扩展DropDownList以使其忽略SelectedValue属性的无效值?到目前为止我见过的唯一例子不起作用。我认为DropDownList会缓存该值,以防它尚未设置其DataSource属性,因此覆盖SelectedValue属性是不够的。
或者,如果有办法使用OnRowUpdating事件手动将数据添加到更新,那就没问题。我已经尝试在GridViewUpdateEventArgs类的NewValues字典中添加值,但它似乎不起作用。请注意,网格绑定到对象列表,而不是DataSourceControl派生控件。
任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
如果有人感兴趣,我想我通过重写PerformDataBinding方法并在那里捕获ArgumentOutOfRangeException来解决这个问题。我怀疑如果两个属性绑定的顺序可能不同,也可能需要重写SelectedValue属性。