2011-02-05 2 views
0

J'ai une liste déroulante sur mon formulaire qui devrait filtrer ou afficher mon nuage de tags pour un projet entier ou pour une itération spécifique. À l'heure actuelle, je ne reçois aucune erreur, mais le contrôle ASCX ne semble pas mettre à jour. Voici mon code, toute aide serait appréciée!DropDown pour filtrer le contrôle ASCX

ASPX DOSSIER:

<asp:DropDownList ID="filteroptions" runat="server" onselectedindexchanged="filteroptions_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList> 

<asp:UpdatePanel ID="UpdateIteration" runat="server"> 
       <ContentTemplate> 
         <TagCloud:TagCloudControl ID="TagCloudControl1" runat="server" /> 
       </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="filteroptions" /> 
       </Triggers> 
</asp:UpdatePanel> 

C# FICHIER:

protected void Page_Load(object sender, EventArgs e) 
{ 

    ... 

    filteroptions.DataSource = ds; 
    filteroptions.DataTextField = "Iteration"; 
    filteroptions.DataValueField = "ProjectIterationID"; 
    filteroptions.DataBind(); 

    filteroptions.Items.Insert(0, new System.Web.UI.WebControls.ListItem("Entire Project", "0")); 

} 

protected void filteroptions_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selected_iteration = filteroptions.SelectedValue; 

    Session["iteration"] = selected_iteration; 
} 

ASCX CS FICHIER:

string proj_id, proj_name, iteration; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    proj_name = Request.QueryString["project"].ToString(); 
    proj_id = Request.QueryString["id"].ToString(); 

    if (String.IsNullOrEmpty((string)Session["iteration"])) 
     iteration = "0"; 
    else 
     iteration = (string)Session["iteration"]; 

    BindTagCloud(); 

} 

private void BindTagCloud() 
{ 

    int pro_id = Convert.ToInt32(proj_id); 
    int iteration_id = Convert.ToInt32(iteration); 

    .... 

    if (iteration_id != 0) 
    { 
     ListView1.DataSource = tagCloudNegativeIteration; 
     ListView1.DataBind(); 

     ListView2.DataSource = tagCloudPositiveIteration; 
     ListView2.DataBind(); 

    } 
    else 
    { 
     ListView1.DataSource = tagCloudNegative; 
     ListView1.DataBind(); 

     ListView2.DataSource = tagCloudPositive; 
     ListView2.DataBind(); 

    } 
+0

Personnellement, je n'utiliserais pas de mise à jour puisque le panneau de mise à jour rend vraiment quelque chose de très facile. Je voudrais à la place déclencher une demande et remplir la zone que vous voulez le tagcloud avec la réponse. –

Répondre

0

Vous avez remplacé par un code '...' et par conséquent, cette réponse pourrait être incorrect.

Avec le code donné, je pense que le problème est dans la méthode Page_Load de votre fichier .aspx. Il semble que la liaison de l'ensemble de données à votre dropdownlist se passe également sur un Postback. Lorsque la page reçoit sa publication, elle liera l'ensemble de données à la liste déroulante et définira sa valeur selectedValue sur le premier élément. Lorsque cela est fait, l'événement est traité et son écouteur est appelé. Dans votre méthode 'filteroptions_SelectedIndexChanged' vous vérifiez la valeur selectedValue et elle aura la valeur du premier élément en cours et non la valeur de l'élément que vous avez sélectionné.

Pour résoudre ce mettre la liaison du dropdownlist en comme celui-ci (IsPostBack!):

protected void Page_Load(object sender, EventArgs e) { 

    ... 

    if (!IsPostBack) 
    { 
     filteroptions.DataSource = ds; 
     filteroptions.DataTextField = "Iteration"; 
     filteroptions.DataValueField = "ProjectIterationID"; 
     filteroptions.DataBind(); 

     filteroptions.Items.Insert(0, new System.Web.UI.WebControls.ListItem("Entire Project", "0"))l 
    } 
} 

Si cette réponse est incorrecte parce qu'elle est basée sur les hypothèses erronées s'il vous plaît me fournir le code complet et je va penser avec vous.

+0

Hey TurBas, j'ai mis la reliure de la liste déroulante dans le (! ISPostBack) comme vous l'avez dit, et quelque chose commence enfin à se produire. C'est étrange cependant, parce que j'obtiens des résultats différents lorsque je sélectionne certaines itérations de la liste. Parfois, le contrôle ascx ne s'affiche pas du tout, parfois il affiche un nuage de tags, mais il est incorrect et affiche parfois le bon. Je ne sais pas pourquoi cela se produit: S – MiziaQ

+0

Hey MiziaQ, heureux d'ici que ma réponse a fourni de l'aide. Je ne peux pas vous aider avec les problèmes que vous décrivez dans le commentaire parce que le code que vous avez posté ne couvre pas cela. – TurBas

+0

Je suis vraiment coincé ici TurBas. Consultez ce lien pour voir la méthode complète BindTagCloud: http://stackoverflow.com/questions/4917019/tagcloud-size-problem. Dois-je effacer la sélection de la liste déroulante quelque part? Chaque fois que je sélectionne une itération de la combobox, j'obtiens un nuage de tags différent - parfois le contrôle ascx ne s'affiche pas du tout ... – MiziaQ

Questions connexes