2010-02-19 54 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屬性也可能需要重寫,如果兩個屬性綁定的順序可能會有所不同。