【发布时间】: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