0

Je pense que c'est une question de cycle de vie de page asp.net, mais pas moins, je ne peux pas tout à fait comprendre.Mise à jour du panneau et de la liste déroulante de liaison de données deux fois - cycle de vie

J'ai une liste déroulante dans un panneau de mise à jour qui répertorie les utilisateurs, puis affiche les détails ci-dessous (mettre à jour ou supprimer). Lorsque je clique sur supprimer, le code derrière va et efface le ddl (pour supprimer l'utilisateur supprimé), puis le redéfinit. Tout va bien. Quelque part entre la fin du code et la mise à jour de la page, la liste est de nouveau ajoutée.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     DropDownList1.AppendDataBoundItems = true; 
     DropDownList1.Items.Insert(0, new ListItem("Select a User", "select")); 
     DropDownList1.SelectedValue = "select"; 
     DropDownList1.DataSourceID = "srcUsers"; 
     DropDownList1.DataBind(); 
    } 
} 
protected void btnDelete_Click(object sender, EventArgs e) 
{ 
    DropDownList1.AppendDataBoundItems = false; 
    DropDownList1.DataSourceID = "srcUsers"; 
    DropDownList1.DataBind(); 
    DropDownList1.AppendDataBoundItems = true; 
    DropDownList1.Items.Insert(0, new ListItem("Select a User", "select")); 
    DropDownList1.SelectedValue = "select"; 
}//at this point, the quick watch shows the correct count for the ddl 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
    <asp:DropDownList ID="DropDownList1" Width="150" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"> 
    </asp:DropDownList> 
    </ContentTemplate> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 

Note: srcUsers est une source de données objet

Si je supprime le code de liaison ddl à partir du bouton, il ne met pas à jour le ddl du tout (avec en, elle le fait deux fois!

Où se lie-il la deuxième fois? Pourquoi n'est-ce pas contraignant si je supprime le code du bouton? Comment se fait-il que je ne puisse pas traverser ça en VS?

+0

Il serait probablement utile si vous avez publié le code dans lequel vous déclarez votre source de données d'objet. – Phaedrus

Répondre

1

Code de Himadri m'a fait penser (merci pour l'effort !!!!) que pour les opérations de suppression, je ne ai vraiment pas besoin de reconsolider le dropdownlist, j'ai le SelectedValue .... donc je peux supprimez-le de la liste déroulante.

DropDownList1.Items.Remove(selectedValue); 

Duh. Je ai sur l'autre moitié du code de la page qui fait une opération de type insert (d'où le panneau de mise à jour) qui appelait le même code (Himindri BindCombo) et ayant le même problème, mais je pense que je peux trouver un similaire Solution.

Je voudrais toujours savoir comment le débogueur VS permet cela.

Merci encore Himadri!

0

Vérifiez le code ci-dessous s'il peut vous être utile.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      BindCombo(); 

     } 
    } 
    public void BindCombo() 
    { 
     DropDownList1.Items.Clear(); 
     DropDownList1.AppendDataBoundItems = true; 
     DropDownList1.Items.Insert(0, new ListItem("Select a Category", "select")); 
     DropDownList1.SelectedValue = "select"; 
     DropDownList1.DataSourceID = "ds1"; 
     DropDownList1.DataBind(); 

    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //---- It can be placed in delete button's click event also ------// 
     ds1.DeleteCommand = "Delete from Categories where CategoryID="+DropDownList1.SelectedValue; 
     ds1.Delete(); 
     BindCombo(); 
     //---- It can be placed in delete button's click event also ------// 
    } 
+0

Sauf si quelque chose me manque, c'est ce que j'ai maintenant. Le problème que j'ai est qu'après BindCombo se déclenche (il remplit 20 éléments au ddl) et la page passe par son cycle de vie, il ajoute quelque part 20 autres éléments (pour 40). DDL.Items.Clear(); n'a pas changé ça. Je veux vraiment savoir comment utiliser le débogueur VS pour trouver s'il ajoutait les éléments la deuxième fois. –

+0

Dans mon exemple, j'ai supprimé DropDownList1.Items.Clear(); de BindCombo() et remplacé bindcombo(), supprimer des instructions uniquement avec DropDownList1.Items.RemoveAt (DropDownList1.SelectedIndex); et vérifiez le code. Le combo ne contient pas de données deux fois. Si combo est rempli avec 20 enregistrements, il reste toujours 20 enregistrements ou moins (après avoir supprimé un enregistrement par DropDownList1.Items.RemoveAt (DropDownList1.SelectedIndex);). Veuillez vérifier à nouveau. Merci – Himadri

+0

Je ne pense vraiment pas que cela a quelque chose à voir avec la liaison ... Je pense que cela a à voir avec la publication dans le panneau de mise à jour. Mon combat était dans le débogage. Si le code est dans une page ASPX, il fonctionne bien. Nest il dans un panneau de mise à jour et quelque part, je reçois une liaison supplémentaire ... Je ne peux pas déboguer où. Items.remove (i); résolu le problème immédiat. Merci pour votre temps, Tim –

Questions connexes