2010-07-23 7 views
0

J'ai donc un ListView (affectmentsListView) dans un UpdatePanel, étant filtré par un DropDownList dans le même UpdatePanel. Le DropDownList a une liste de personnes et utilise autopostback, et le ListView montre les tâches auxquelles ces personnes sont assignées.ListView DataBound dit Items> 0 when actually Items <= 0

Je suis en train d'utiliser un code similaire à ceci:

protected void assignmentsListView_DataBound(object sender, EventArgs e) 
{ 
    string resFirstName = Utilities.getResourceFirstName(resDdl.SelectedValue); 
    if (assignmentsListView.Items.Count <= 0) 
    { 
     //Show error message 
    } 
    else 
    { 
     //Try to find the ImageButton in the ListView's header template. 
     ImageButton exportButton = (ImageButton)assignmentsListView.FindControl("ImageButton3"); 

     //Register this button as a PostBack event in the Master Page 
     ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
     ScriptManager.RegisterPostBackControl(exportButton); 
    } 

} 

Quand je charge la page, la DropDownList montre la première personne dans la liste, et le ListView montre bien que les tâches de personnes.

Si je sélectionne ensuite une personne dont je sais qu'elle n'a aucune tâche, j'obtiens une erreur à la méthode RegisterPostBackControl(), indiquant que le contrôle transmis ne peut pas être nul. Lors du débogage, à la méthode RegisterPostBackControl, il montre que la collection Items ListView contient 0 éléments (le nombre d'éléments correspond à la personne sélectionnée avant la personne actuelle).

Que se passe-t-il? Aucune suggestion?

Répondre

0

Dans les applications Asp.Net Web Forms, l'ordre des événements n'est pas toujours celui que vous souhaitez. Pour votre cas, la sélection de nouvelle personne est probablement appliquée après l'exécution de cette méthode. La meilleure chose à faire est de forcer les connexions de données dans un événement précédent (comme Page_Init)

+0

Si cela est vrai, DataBound doit être redéfini: "Cet événement informe le serveur de contrôle que * toute logique de liaison de données écrite pour lui a completé*." http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.databound.aspx –

+0

Il se peut que cet événement soit déclenché deux fois. Comme nous n'avons pas accès au reste de la classe Form, le meilleur conseil que je peux donner est de configurer des points d'arrêt à chaque méthode de gestionnaire d'événement, en suivant la progression réelle des événements. – sukru