IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

C# Repeater, récupère les données mais pas la première fois


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut C# Repeater, récupère les données mais pas la première fois
    Bonjour à tous,

    j'ai un problème assez bizarre.

    Dans mon application j'ai deux repeater imbriqués

    avec des textBox de nombre variable.

    Jusque là, il me les créée bien, tout fonctionne

    Après je veux récupérer les données

    après avoir clické un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     List<string> contenu= new List<string>() ;
                foreach (RepeaterItem rpt in Repeater1.Items)
                {
     
     
                     Repeater rpt2 = rpt.FindControl("Repeater2") as Repeater;
     
                     foreach (RepeaterItem item in rpt2.Items)
                     {
                          TextBox tex = item.FindControl("tbValue") as TextBox;
                          if (tex != null)
                          {
     
                                Response.Write("réussi"+tex.Text);
                                contenu.Add(tex.Text);
     
                          }
                           else
                          {
                                Response.Write("tex est null ");
                          }
                      }
                 }
    Quand je clique sur le bouton pour la premiere fois(après avoir rempli les textBox, il rentre dans mon if et il me note réussi mais me note pas la valeur des textBox et remet les champs vides sur ma page asp.

    Je reremplis les champs , je reclique sur le bouton, tout fonctionne et il me note le contenu des textBox et garde les TetxtBox remplies.

    Bizzarre , non ?

    J'espère que je me suis assez bien exprimé *-)

    Est ce que quelqu'un aurait une idée d'où ça pourrait venir ?

    Merci !

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par eleve_prog Voir le message
    Je reremplis les champs , je reclique sur le bouton, tout fonctionne et il me note le contenu des textBox et garde les TetxtBox remplies.

    Bizzarre , non ?
    La deuxième fois, remplis les mais avec des valeurs différentes et tu verras

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    La deuxième fois tout fonctionne bien

    Mais j'aimerai qu'il fasse pareil la première fois...

  4. #4
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Ton problème est surement du a une mauvaise gestion du PostBack.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    C'est ce que je me suis dit aussi...

    Mais que ce soit le premier ou le deuxième postback, qu'est ce que ça change ?

    Ca me prend la tête ce problème

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    Ce change !

    Dis-nous ou tu rempli ton repeater, que fais-tu dans ton page_load et enfin quand effectues-tu ton action sur ton bouton.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Alors en fait j'utilise un multiview...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    private DataTable dtr1;
    protected void Page_Load(object sender, EventArgs e)
            {
     
     
                if (!IsPostBack)
                {
                    try
                    {
                         MultiView1.ActiveViewIndex = 0;
                        // Le reste j'affiche seulement des données
     
                    }
     
                    finally
                    {
     
                    }
     
     
     
                }
     
     
     
     
     
            }
    Après je change de View et j'ajoute et remplis ma base de données avec les valeurs encodées...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     protected void ButtonCreerEvaluation_Click(object sender, EventArgs e) 
            {
                       // Quand je clique sur un bouton
                       MultiView1.ActiveViewIndex = 1;
                        remplirInfos(idSheet);
                        addPlan(MultiView1.ActiveViewIndex, idSheet);
                        displayComponent(idSheet,MultiView1.ActiveViewIndex);
    }
    La fonction où je crée mes repeater

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
       public void displayComponent(int idSheet , int step)
          {
     
                conn = new SqlConnection(ConfigurationManager.AppSettings["connectionString"]);
                conn.Open();
                try
                {
                    DataSet ds = new DataSet();
                    dtr1 = new DataTable("Plans");
                    SqlCommand cmd = new SqlCommand("SELECT Title,P.PlanID As PlanID FROM dbo.EvaluationListPlansFiche L,EvaluationPlan P  Where P.PlanID = L.PlanID AND L.SheetID = @SheetID  AND Step = @Step ", conn);
                    cmd.Parameters.Add("@SheetID", SqlDbType.Int).Value = idSheet;
                    cmd.Parameters.Add("@Step", SqlDbType.Int).Value = step;
     
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dtr1);
                    ds.Tables.Add(dtr1);
     
                    Repeater1.DataSource = dtr1;
                    Repeater1.DataBind();
         finally {
                  conn.Close();
     
              }
     
     
          }
    Mes onItemdataBound de mes repeater

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     protected void rpt1(object sender, RepeaterItemEventArgs e)
          {
     
     
             conn = new SqlConnection(ConfigurationManager.AppSettings["connectionString"]);
             conn.Open();
     
              System.Web.UI.WebControls.Label lab = (System.Web.UI.WebControls.Label)e.Item.FindControl("label2");
              lab.Text = ((DataRowView)e.Item.DataItem).Row["TITLE"].ToString();
              Repeater Repeater2= (Repeater)e.Item.FindControl("Repeater2");
     
               DataSet ds = new DataSet();
               DataTable dtr2 = new DataTable("Section");
     
     
     
     
              SqlCommand cmd = new SqlCommand("SELECT Title,DescriptionSec,SectionID FROM dbo.EvaluationSection Where PlanID =  @PlanID", conn);
              cmd.Parameters.Add("@PlanID", SqlDbType.Int).Value = Int32.Parse( ((DataRowView)e.Item.DataItem).Row["PlanID"].ToString());
              SqlDataAdapter da = new SqlDataAdapter(cmd);
              da.Fill(dtr2);
              ds.Tables.Add(dtr2);
     
     
     
              Repeater2.DataSource = dtr2;
              Repeater2.DataBind();
     
     
          }
          protected void rpt2(object sender, RepeaterItemEventArgs e)
          {
              Response.Write("test");
              TextBox tbValue = (TextBox)e.Item.FindControl("tbValue");
              tbValue.Text = "Voilà un texte";
              tbValue.ID = ((DataRowView)e.Item.DataItem).Row["SectionID"].ToString();
     
              System.Web.UI.WebControls.Label labelTitre = (System.Web.UI.WebControls.Label)e.Item.FindControl("labelTitre");
              System.Web.UI.WebControls.Label LabelDesc = (System.Web.UI.WebControls.Label)e.Item.FindControl("LabelDesc");
     
              labelTitre.Text = ((DataRowView)e.Item.DataItem).Row["TITLE"].ToString();
              LabelDesc.Text = ((DataRowView)e.Item.DataItem).Row["DescriptionSec"].ToString();
          }
    Et mon bouton pour afficher ce qui est marqué dans mes textBox de mesrepeater

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     protected void Valider_Click(object sender,EventArgs e)
            {
     
                   foreach (RepeaterItem rpt in Repeater1.Items)
                {
     
     
                     Repeater rpt2 = rpt.FindControl("Repeater2") as Repeater;
     
                     foreach (RepeaterItem item in rpt2.Items)
                     {
                          TextBox tex = item.FindControl("tbValue") as TextBox;
                          if (tex != null)
                          {
     
                                Response.Write("réussi"+tex.Text);
                                contenu.Add(tex.Text);
     
                          }
                           else
                          {
                                Response.Write("tex est null ");
                          }
                      }
                 }
                }
    Voilà , je crois que j'ai tout mis...

    Donc mon problème, c'est que quand il rentre pour la premiere fois sur Valider_Click , il note que "reussi" et vide mes textBox , apres , les fois suivantes , tout fonctionne niquel...

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Re,

    Je suis désolé mais là je ne vois pas d'erreur manifeste (j'aurai parié sur une mauvaise utilisation du postback ou du page_load mais ca na pas l'air d'être le cas).

    Fais-tu quelque chose sur le pagePreRender ou équivalent ?

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Non pas du tout

    Il doit bien y avoir une explication ,non ?

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Alleluia ! J'ai trouvé ou Eureka si vous préférez

    Je ne remplissais pas mes valeurs avec un DataBinder dans mon ascx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text='<%# DataBinder.Eval(Container.DataItem, "ContentText") %>'
    je vois pas trop ce que ça change mais maintenant ça fonctionne direct

    Il était temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/09/2007, 17h06
  2. [9i] Crypter les données mais pas la structure
    Par nuke_y dans le forum Oracle
    Réponses: 38
    Dernier message: 27/02/2006, 11h23
  3. CSS : Bordure sur les liens mais pas sur les images ?
    Par monstroplante dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 04/02/2006, 14h18
  4. [MFC] Fermer les Popup, mais pas l'appli
    Par Grey dans le forum MFC
    Réponses: 4
    Dernier message: 16/11/2005, 20h30
  5. [CSS] border-collapse sur les TR mais pas sur les TD.
    Par hpfx dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 03/04/2005, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo