2009-12-28 3 views
1

Nous utilisons le type List<object> comme source de données pour dropdownlist.List <> remove item issue

flux de processus:

  1. valeur Assign (List<object>) à la session en cas de pageload (!ispostback).
  2. Extrayez la valeur de la session en ddl_SelectedIndexChanged événement
  3. supprimer un élément particulier de la liste et se lient à la ddl

code:

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

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

Problème:

Point obtient enlevé de la source de base aussi (session).

+2

Notez que la 'nouvelle liste ()' est inutile et est mis au rebut chaque fois. –

Répondre

4

Le problème est que vous manipulez la liste qui est stockée dans la session, pas une copie. Au lieu de cela, si vous faites quelque chose comme ceci:

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

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

vous travaillez sur une copie de la liste, et l'original ne changera pas.

+0

Merci pour votre aide – Geeth

4

Il semble que vous stockez la liste en cours de session, la récupère et la mute. En fait, vous pouvez voir des résultats différents si vous passez de l'état in-process à l'état distribué ou à l'état de la base de données.

Le problème est que avec l'état en cours de traitement il n'y a qu'une seule liste. Il n'est pas sérialisé/désérialisé, donc lorsque vous supprimez un élément, il reste supprimé. Vous pouvez cloner la liste assez facilement:

locList = new List<Loc>(locList); 

qui devrait résoudre ce problème. Avec les autres implémentations d'état, les données sont sérialisées et chaque copie désérialisée est séparée, donc vous ne le verrez pas. Mais je ne dépendrais pas de la mise en œuvre de l'État. Personnellement, je n'ai jamais compris pourquoi de telles subtilités changeantes de comportement sont permises avec l'état; Je l'aurais préféré à toujours sérialiser/désérialiser, même en cours de processus.

+0

Merci pour votre information – Geeth