Javascript dans une boucle for dans le codebehind

lomito Messages postés 3 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 2 août 2007 - 31 juil. 2007 à 18:49
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 2 août 2007 à 20:33
Salut.

je suis sous VS 2005 et dans une boucle foreach de ma méthode, je veux à chaque ligne, afficher les informations que je récupère dans ma datatable et  les afficher.
en gros  quand je suis sur la ligne 1, j'affiche ses infos
et quand je passe sur la 2, pareil. sans que je n'intervienne en cliquant un bouton ou quelquechose d'autre.
Je voudrais que les infos s'affichent dans un label ou un controle html que j'ai déjà.

foreach (datarow row in mydatatable.rows)
{
  .....

//affichage des infos de la row["xxx"] dans le label ou un autre controle.

....

}

Let's work!

5 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
31 juil. 2007 à 23:45
Vu que l'affichage se fait sur le client, tu ne peux pas afficher ligne par ligne, il faut attendre la fin de la boucle.

Cela n'empèche pas d'écrire les données au fur et à mesure dans la réponse :
Response.Write(row["xxx"] .ToString() + "
");

Ou de les accumuler dans un label  :
monLabel.Text += row["xxx"] .ToString() + "
";

Mais j'avoue que ta question manque de précision sur ce que tu souhaites réellement faire.

A plus.
0
lomito Messages postés 3 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 2 août 2007
1 août 2007 à 11:13
Merci d'avoir réagi.
j'ai une datatable dans laquelle  je mets des adresses mails et autres informations et je la parcours pour envoyer des mails aux adresses qui s'y trouvent. Les lignes sont nombrueses et les mails peuvent être gros et logns à constituer. Je voudrais voir dans mon label ou autre, sur quelle ligne je suis exactement à un instant t.

Let's work!
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
1 août 2007 à 22:53
Je pense que ajax fait ça facilement mais avec du bricolage on peut s'en sortir :

// Appelle la page qui traite les mails depuis une page quelconque
// avec juste un label sur la page et rien d'autre (lbl_info)

// Le code behind ne contient que la méthode page_load() avec des données de tests





private
void Page_Load(object sender, System.EventArgs e)


{
   


if( !IsPostBack )
   

{
      


if(Session["dataTable"] ==null)
      

{
         

System.Data.DataTable myDataTable =new DataTable();
        

myDataTable.Columns.Add("Champ1", typeof(String));
         

myDataTable.Rows.Add(newobject[]{"VAL1"});
         

myDataTable.Rows.Add(newobject[]{"VAL2"});
        

myDataTable.Rows.Add(newobject[]{"VAL3"});

         


// traite dt.Rows[0]
         



this
.lbl_info.Text = myDataTable.Rows[0]["Champ1"].ToString(); 

         


// sauve
         


Session["dataTable"] = myDataTable;


         Session["compteurLigne"] =0;

         


// reload
         


Response.Write("<script>window.setTimeout("window.location.reload(true)", 2000);</script>");
      

}
      


else



      {
         

System.Data.DataTable dt = (System.Data.DataTable)Session["dataTable"];
         


int cmpt = Int32.Parse(Session["compteurLigne"].ToString());
         

cmpt++;
         

Session["compteurLigne"] = cmpt;
         


if( cmpt < dt.Rows.Count )
         

{
            


// Traite dt.Rows[cmpt]
            


lbl_info.Text = dt.Rows[cmpt]["Champ1"].ToString();
            

Response.Write("<script>window.setTimeout("window.location.reload(true)", 2000);</script>" ); 
         


         


else
         


{
            


this
.lbl_info.Text ="Fermeture...";
            

Session.Remove("dataTable");
            

Session.Remove("compteurLigne");
            

Response.Write("<script>window.setTimeout("window.close()", 2000);</script>" );
         

}
   

   }


   }


}

On voit bien le traitement en cours mais avec un rechargement, ce qui n'est pas très joli C'est pourquoi AJAX est utile !
0
lomito Messages postés 3 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 2 août 2007
2 août 2007 à 11:59
Merci.
J'ai essayé avec ajax, comme je débute là dedans je n'ai pas réussi.
Pourrais-tu m'éclairer sur comment le faire en ajax?
Je vais tester déjà ce code et je te dis la suite.
meri

Let's work!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
2 août 2007 à 20:33
Ben il faut installer un framework ajax puis il faut
importer les dll avec un <register>
enuite on déclare un <scriptManager>
Puis on entoure le controle que l'on veut traiter avec ajax d'un

   

Grace à cela, à chaque postBack seules les parties de la page entourées d'un updatePanel sont raffraichies sans blinker toutes la page !

On peut forcer l'updatePanel dans le code avec 
monUpdPanel.Update();

Mais là c'est une toutes petite partie d'ajax, on peut aussi dessiner sur une page web, appeler des webServices en code client javascript ect...

Seul problème, il faut absolument maitriser le javascript objet (DOM) pour utiliser correctement ajax.
Des classes wrappers existent pour simplifier tout ça.
J'ai un bouquin de 600 pages sur le sujet donc dans un post c'est pas évident d'être super clair.

Ceci dit, bon courage et à plus !
0
Rejoignez-nous