2010-12-08 4 views
0

J'ai une liste déroulante sur ma page aspx, que je lie à une source de données. J'ai remarqué que la sélection du premier élément n'a pas déclenché l'événement selectedindexchanged. Partant à la recherche d'une réponse, j'ai trouvé que la chose la plus commune à faire était de mettre un premier élément dans le ddl, soit avec une chaîne vide ou avec quelque chose comme "--- Select ---".Prise en compte de la sélection du premier élément dans la liste déroulante et les événements suivants

Super, ça a marché. Mais ensuite j'ai remarqué qu'il a encore tiré mon événement Page_Load. Dans mon événement Page_Load, je vérifie la publication. Si ce n'est pas le cas, il se connecte à un répéteur et le ddl. Donc, ce qui se passe est que la sélection du premier élément dans le ddl saute la liaison de données vers le répéteur et ddl, et je me retrouve avec une page vierge. J'ai d'abord pensé que je pouvais résoudre ce problème en activant viewstate, mais hélas. Après ça et là, j'ai mis ce qui suit dans mon code, mais j'ai vraiment l'impression que ça a l'air bizarre. Quelqu'un a-t-il une meilleure idée?

if (!IsPostBack || RacesDropDownList.SelectedIndex == 0) 
{ 
    PopulateControls(); 
} 

Répondre

0

Vous devez d'abord activer viewstate. Lorsqu'aucune publication n'est effectuée, vous devez alors lier la liste déroulante à la source de données. Faites-en ajoutant simplement ce qui suit à l'événement Page_Load:

if (!IsPostBack) 
{ 
    PopulateControls(); 
} 

Gardez à l'esprit que le selectedIndex par défaut est toujours 0, et si elle a changé, un postback se produira si votre code original déjà sauter la liaison de données en raison de la condition! IsPostBack => '|| RacesDropDownList.SelectedIndex == 0 'n'est pas nécessaire du tout. Ensuite, si à un événement vous devez actualiser la liste, la solution habituelle consiste à activer la fonction PopulateControls() dans le gestionnaire d'événements et pas dans Page_Load().

Par exemple:

protected SelectedIndexChanged(...) 
{ 
// Do something 
changeCounter++; 

// Not necessary, but good to have 
ClearControlsCurrentValues(); 

// Populate the control again 
PopulateControls(); 
} 

J'espère que cette aide.

+0

Oui, c'est compris! Ça marche maintenant sans le '|| RacesDropDownList.SelectedIndex == 0 'dans le chargement de la page. Je vous remercie! –

Questions connexes