2009-12-28 67 views
1

我們使用List<object>類型作爲下拉列表的數據源。列表<>刪除商品問題

流程:

  1. 分配值(List<object>)到會話中頁面加載事件(!ispostback)。
  2. 檢索ddl_SelectedIndexChanged事件從會話值
  3. 從列表中刪除特定項目並綁定到DDL

代碼:

List<Loc> locList = new List<Loc>(); 
locList = (List<Loc>)Session["Loc"]; 
locID = "xxx"; 

locList.RemoveAt(locList.FindIndex(FindLocation)); 

問題:

項目是越來越刪除從基地來源也(會議)。

+2

請注意,'新列表()'是不必要的,並且每次都被丟棄。 –

回答

4

問題是,您正在操作存儲在會話中的列表,而不是副本。相反,如果你做這樣的事情:

List<Loc> locList = new List<Loc>((List<Loc>)Session["Loc"]); 
locID = "xxx"; 

locList.RemoveAt(locList.FindIndex(FindLocation)); 

你正在對列表的副本進行操作,並且原件不會改變。

+0

謝謝您的幫助 – Geeth

4

這聽起來像你在會話中存儲列表,取出它,並改變它。實際上,如果您從進程內狀態切換到分佈式狀態或數據庫狀態,您可能會看到不同的結果。

問題是,與進程中狀態只有一個列表。它不是序列化/反序列化的,所以當你刪除一個項目時,它會一直被刪除。你可以很容易地克隆列表:

locList = new List<Loc>(locList); 

這應該解決這個問題。在其他狀態實現中,數據被序列化,並且每個反序列化的副本是分開的,所以你不會看到這個。但我不會依賴於國家的實施。就我個人而言,我從來沒有理解爲什麼這種改變行爲的微妙之處在國家允許的範圍內;即使在進程中,我也會傾向於總是序列化/反序列化。

+0

謝謝您的信息 – Geeth