Problème avec une collection de type statique...

PeTeRsLaStAr Messages postés 158 Date d'inscription samedi 22 juin 2002 Statut Membre Dernière intervention 27 juin 2015 - 5 févr. 2008 à 16:01
PeTeRsLaStAr Messages postés 158 Date d'inscription samedi 22 juin 2002 Statut Membre Dernière intervention 27 juin 2015 - 7 févr. 2008 à 10:11
(le titre est un peu vague, mais je ne sais pas trop, comment résumer en une phrase mon problème...)

Voilà mon problème.
J'ai un tableau qui est géré dynamiquement (sur la colonne de droite, un bouton ajouter, ajoute dynamiquement une nouvelle ligne).
Dans chaque ligne, il y a une combo Box, chargée avec le contenu d'une web Methode.

Auparavant, j'appelais la webMethode à chaque création d'une nouvelle ligne pour gérer le contenu de ma web méthode (sachant que je ne peux pas Databinder avec mon dataset, car j'effectue des traitements sur ces données... à savoir reformatage, etc...).
La webMethode est devenue très couteuse en temps, et le chargement d'une nouvelle ligne est maintenant beaucoup trop long. il me faut donc une solution de rechange.

J'ai alors essayé au premier chargement de ma comboBox de stocker mes valeurs dans une varialbe statique de type "NameValueConfigurationCollection".
Cela donnait à peu près ça :

protected static bool mbDDLHasBeenLoad;
protected static m_MyCollection;

protected void LoadDropDownList(DropDownList DDLToFill)
{
        if (!mbDDLHasBeenLoad)// Premier chargement dans la collection
        {
            m_Array_DDL_Liste_Products = new NameValueConfigurationCollection();
            NameValueConfigurationElement MyDataToAdd;
            DDLToFill.Items.Clear();
            // Appel de la WM
            MyWebServices MyWS = new MyWebServices;
             DataSet MyDS = MyWS.GetData();

            foreach (DataRow MyRow in MyDS.Rows)
            {
                    ListItem MyItem = new ListItem(MyRow["Code"].ToString(), MyRow["Libelle"].ToString());

                    DDLToFill.Items.Add(MyItem);
                    MyDataToAdd= new NameValueConfigurationElement(MyRow["Code"].ToString(), MyRow["Libelle"].ToString());
                    m_MyCollection.Add(MyProductToAdd);
             }
        }
        else    // La collection a déjà été chrgée
        {
            DDLToFill.Items.Clear();

            // Récupération de toutes les clés dans un tableau de string
            string[] saAllKeyValues = m_MyCollection.AllKeys;
            foreach (string sKey in saAllKeyValues)
            {
                DDLToFill.Items.Add(new ListItem(sKey, m_MyCollection[sKey].ToString()));
            }
        }

(J'edspère avoir été aussi clair que possible dans mon exemple...)

LE PROBLEME, est le suivant :
Dès que je modifie une DropDownList, après mon postBack, la valeur de ma DDL devient la même que la valeur de ma première DDL, chargée initialement...

Ma question vous l'avez compris : comment faire, pour que chaque DropDownList ait un comportement individuel ? Là j'ai l'impression que je dois faire une référence à ma DDL, et que du coup, toutes les DDL sont en fait liées à la première...

Merci pour vos réponses :)
Si vous avez des questions, n'hésitez pas...

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher

2 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
6 févr. 2008 à 22:36
Salut,
static veut dire partagé, donc il te faut une collection par DropDownList.

// Si premiere demande

// crée la collection de la dropDownList demandée (la 1ère par exemple)
m_MyCollection1 = new ect..

// sauve entre les posback

ViewState.Add("DropDownList1", m_MyCollection1);

//  a chaque postback

if( DDLToFill.ID = "DropDownList1" )
{
   // recup collection 1
   m_collecRef = ViewState["DropDownList1"] as leTypeCollection;
}
else if( DDLToFill.ID = "DropDownList2" )
{
   // recup collection 2
   m_collecRef= ViewState["DropDownList2"] as leTypeCollection;
}

// rempli la dropDownList demandée avec la collection correspondante
DDLToFill.Items.Add(sKey, m_collecRef[sKey].ToString());
0
PeTeRsLaStAr Messages postés 158 Date d'inscription samedi 22 juin 2002 Statut Membre Dernière intervention 27 juin 2015 1
7 févr. 2008 à 10:11
Merci pour ta réponse.

Le problème de cette solution (sauf s'il y a une feinte) c'est que je ne sais pas combien de lignes je dois avoir...
Du coup, je me vois mal créer 15 ou 20 DDL...

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
0
Rejoignez-nous