2010-02-19 63 views
1

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

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

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

我正在寻找最简单的方法来解决这个问题。如果可能的话,我不想对现有的代码做很多修改。

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

实际的问题:

是否有某种方式来扩展DropDownList的,使其忽略SelectedValue属性无效值?迄今为止我看到的唯一例子是行不通的。我认为DropDownList缓存值的情况下,它还没有设置它的DataSource属性,所以重写SelectedValue属性是不够的。

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

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

回答

2

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