2010-12-03 15 views
0

J'ai deux répéteurs qui ressemble à ceci:comment passer des valeurs entre deux repeateres sur la même page

Arrange By: Name | Age | Area 

ce que je veux faire maintenant est de remplir le deuxième répéteur à partir de la base de données avec l'alphabet, et Si l'on cliquait sur l'âge, le deuxième répéteur est rempli à partir de la base de données avec certaines tranches d'âge!

J'ai déjà implémenté mon idée en plaçant un lien hypertexte dans le premier répéteur, qui passe - en utilisant sa propriété NavigateUrl - un URL pour la même page mais avec des valeurs de chaîne de requête!

On m'a dit que les querystrings sont utilisés pour passer des valeurs d'une page à l'autre, pas la même page ... et aussi je voulais utiliser AJAX (gestionnaire de scripts et panneau de mise à jour) mais il s'avère que j'ai utiliser un contrôle serveur dans mon répéteur au lieu des contrôles html afin qu'il puisse poster sur le serveur

J'espère que vous m'aideriez avec une bonne implémentation pour passer la valeur de repeater1 à repeater2 et si vous pensez que j'ai déclaré quelque chose de mal S'il vous plaît Corret moi!

Merci à l'avance :)

EDIT

my.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
     { 
      string commandString1 = "SELECT [arrange_by_id], [arrange_by] FROM [arrange_by]"; 


      using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString)) 
      { 
       using (SqlCommand cm = new SqlCommand(commandString1, cn)) 
       { 
        cn.Open(); 

        using (SqlDataReader dr = cm.ExecuteReader()) 
        { 
         ArrangeBy_rpt.DataSource = dr; 
         ArrangeBy_rpt.DataBind(); 
        } 
       } 
      } 
      } 

    void arrange_lnkbtn_command(object sender, CommandEventArgs e) 
    { 
     Label1.Text = (e.CommandArgument).ToString(); 
    } 

my.aspx

<asp:Repeater ID="ArrangeBy_rpt" runat="server"> 
     <ItemTemplate> 
      <asp:LinkButton id="arrange_lnkbtn" OnCommand="arrange_lnkbtn_command" CommandArgument='<%#Eval("arrange_by_id") %>' runat="server"> 
      <%# Eval("arrange_by") %> 
      </asp:LinkButton> 
     </ItemTemplate> 
     <SeparatorTemplate> | </SeparatorTemplate> 
    </asp:Repeater> 
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 

Compilation erreur

Message d'erreur du compilateur: CS1061: 'ASP.sortingcontrol_ascx' ne contient pas de définition pour 'arrange_lnkbtn_command' et aucune méthode d'extension 'arrange_lnkbtn_command' acceptant un premier argument de type 'ASP.sortingcontrol_ascx' n'a été trouvée (il manque une directive using ou une référence d'assemblage?)

Line 4: <asp:Repeater ID="ArrangeBy_rpt" runat="server"> 
Line 5:  <ItemTemplate> 
Line 6:  <asp:LinkButton id="arrange_lnkbtn" OnCommand="arrange_lnkbtn_command" CommandArgument='<%#Eval("arrange_by_id") %>' runat="server"> 
Line 7:  <%# Eval("arrange_by") %> 
Line 8:  </asp:LinkButton> 

Répondre

1

il n'y a rien de mal en soi avec les données de passage à la même page en utilisant la chaîne de requête, mais il ne doit pas être utilisé pour les données sensibles que l'utilisateur peut changer par « piratage » l'URL Cependant, ce n'est pas la manière standard de faire les choses dans ASP.NET WebForms, car il ne publiera pas les valeurs des autres contrôles sur la page (et donc ils ne conserveront pas leur état sans que vous ayez manuellement à les remplir de nouveau sur chaque chargement de page). Mais si ce n'est pas un problème pour vous, n'hésitez pas à coller avec Querystring.

Howecer, généralement vous utiliseriez un contrôle côté serveur comme un asp:Button ou un asp:LinkButton puis gérer leur événement OnClick. Toutefois, pour transmettre des données avec un, vous pouvez utiliser les propriétés CommandName et CommandArgument du bouton, puis gérer l'événement OnCommand.

<asp:LinkButton id="LinkButton1" 
      Text="Click Me" 
      CommandName="Age" 
      CommandArgument="18" 
      OnCommand="LinkButton_Command" 
      runat="server"/> 

Dans le code-behind:

void LinkButton_Command(Object sender, CommandEventArgs e) 
    { 
    var data = GetData(e.commandArgument); // implement a method that gets your data filtered by the argument passed from the button 
    Repeater2.DataSource = data; 
    Repeater2.DataBind(); 
    } 
+0

votre réponse était simple et droite, mais si vous avez lu ma question ce linkbutton est placé à l'intérieur d'un répéteur et en fonction de la valeur linkbutton cliqué, le second répéteur être peuplé en fonction de cette valeur -Comment le faire!C'est ce que j'espère bien savoir - – lKashef

+0

@lKashef J'ai mis à jour ma réponse pour montrer un sens. Évidemment je ne sais pas comment vos données sont stockées, ou comment vous les récupérez, mais vous devez essentiellement obtenir vos données et les filtrer en fonction de l'argument passé à partir de la commande de bouton, puis le lier à votre second répéteur. –

+0

c'est plus clair, GRÂCE À VOUS ... mais je ne sais pas comment gérer les événements de linkbutton quand il est à l'intérieur du répéteur. dans la vue de conception il ne me laissera pas double cliquer sur le linkbutton..juste le répéteur parent! Puis j'ai essayé de le coder en dur, il a montré cette erreur "manque-t-il une directive using ou une référence d'assembly?"! – lKashef