Ajout de lignes dans une table

Ajout de lignes dans une table - C#/.NET managed - Programmation

Marsh Posté le 18-01-2011 à 12:04:21    

Bonjour à tous,
Je cherche à créer un tableau dynamique, c'est à dire à partir de contrôles utilisateur ajouter et enlever des lignes.
Pour cela, j'ai fait quelques tests...
 
Dans ma page aspx, j'ai:
   -------------------------------------------------------------------
<table id="Tab1" runat="server">
                 <tr>
           <th>Nom Complet</th>
           <th>CIN</th>
           <th>Date de Naissance</th>
       </tr>    
</table>
<asp:Button ID="BtnAdd" Text="Ajouter Ligne" runat="server" onclick="BtnAdd_Click"/>
  ---------------------------------------------------------------------
 
Dans ma page aspx.cs, j'ai:
  ---------------------------------------------------------------------
protected void BtnAdd_Click(object sender, EventArgs e)
    {
        // créer une instace de ligne
        HtmlTableRow newRow = new HtmlTableRow();
         
        // Pour chacune des 3 colonnes
        for (int i = 0; i < 3; i++)        
        {
            //créer un champ
            TextBox tb = new TextBox();
            HtmlTableCell cell = new HtmlTableCell();    
            cell.Controls.Add(tb);            
            newRow.Cells.Add(cell);
        }                
            Tab1.Controls.Add(newRow);            
    }
  -------------------------------------------------------------------
j'ai cherché beaucoup. si vous avez une idée merci de m'aider  :??:

Reply

Marsh Posté le 18-01-2011 à 12:04:21   

Reply

Marsh Posté le 18-01-2011 à 13:03:11    

j'ai oublié de signaler le problème:
une seule ligne s'ajoute et stop, après meme si je clique rien ne se passe.
merci

Reply

Marsh Posté le 19-01-2011 à 15:37:52    

Utilise plutôt le contrôle   asp:Table  
 
Je pense que le row que tu ajoute n'est pas dans le ViewState.

Reply

Marsh Posté le 19-01-2011 à 16:18:33    

tout d'abord merci pour votre réponse.
j'ai fait une recherche sur ce ViewState mais je sais pas comment la manipuler.

Reply

Marsh Posté le 23-01-2011 à 00:16:06    

ov3rflow a écrit :

Utilise plutôt le contrôle   asp:Table

Je pense que le row que tu ajoute n'est pas dans le ViewState.


Pareil.
Si tu ne comprends pas le problème sous jacent manar-info je te conseille de te renseigner un peu, c'est crucial en web de comprendre ces notions...
Dans ton cas pour faire simple, pour conserver tes lignes d'un post back à l'autre tu dois stocker quelque part (en session par exemple) les objets que tu veux restituer dans ton tableau et reconstruire celui-ci entièrement à chaque fois, pas juste la dernière ligne.
Ou bien utiliser un type de contrôle qui permet l'exploitation du Viewstate.


Message édité par TotalRecall le 23-01-2011 à 00:16:48

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 23-01-2011 à 11:04:01    

je vous remercie j'ai résolu le problème en utilisant les viewstate.
voila le code si quelqu'un rencontrera le meme problème:

Citation :

protected void Page_Load(object sender, EventArgs e)
    {        
        int nbLignesAjoutees = 0;
        if (!IsPostBack)
        {
            ViewState["nbLignes"] = 0;
        }
        else
        {
                nbLignesAjoutees = (int)ViewState["nbLignes"];
             
            for (int j = 0; j < nbLignesAjoutees; j++)
            {
                HtmlTableRow newRow = new HtmlTableRow();
                for (int i = 0; i < 3; i++)
                {
                    //créer un champ
                    TextBox tb = new TextBox();
                    HtmlTableCell cell = new HtmlTableCell();
                    cell.Controls.Add(tb);
                    newRow.Cells.Add(cell);
                }
 
                Tab1.Controls.Add(newRow);
            }
           
 
        }
    }
 
    protected void BtnAdd_Click(object sender, EventArgs e)
    {
           
            // créer une instace de ligne
            HtmlTableRow newRow = new HtmlTableRow();
 
            // Pour chacune des 3 colonnes
            for (int i = 0; i < 3; i++)
            {
                TextBox tb = new TextBox();
                HtmlTableCell cell = new HtmlTableCell();
                cell.Controls.Add(tb);
                newRow.Cells.Add(cell);                
            }
 
            Tab1.Controls.Add(newRow);          
           
            int nbCases = (int)ViewState["nbLignes"];
            nbCases++;
            ViewState["nbLignes"] = nbCases;
         
    }


 
je cherche maintenant à ajouter les scrollbar à mon tableau.
 
merci.

Reply

Marsh Posté le 23-01-2011 à 14:08:26    

Je ne comprend pas pourquoi tu te donnes la peine d'implémenter (mal en plus et de façon aussi restrictive) quelque chose qui est supporté de façon native ?  
Si c'est juste pour apprendre soit, mais bon...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 23-01-2011 à 15:25:45    

vous m'avez dit d'utiliser les viewstate et voila je que j'ai fait, je comprend pas c'est quoi cette chose qui est supporté de façon native ou bien ce que j'ai fait mal dans le code. j'aimerai bien que tu m'explique ou tu me précise dans les lignes de code  l'erreur que j'ai commis.
merci.

Reply

Marsh Posté le 23-01-2011 à 15:33:24    

Non, on a dit que la perte de tes lignes ajoutées d'un postback à l'autre était lié au Viewstate, pas de s'en servir pour contourner le problème, nuance ;).
Disons que ton code est parfait, dans le sens où il est propre et doit parfaitement fonctionner pour l'usage que tu en fais. Tu sembles également avoir compris comment fonctionne le viewstate et comment l'utiliser pour mémoriser temporairement une info.
Ce que je constatais c'est que ton code ne peut servir à rien en l'état : tout ce que tu y saisis sera perdu d'un postback à l'autre, et je présume que ce n'est pas ce que tu veux. D'où le fait que plutôt que stocker la structure du tableau, je me serai intéressé à son contenu.


Message édité par TotalRecall le 23-01-2011 à 15:34:19

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 23-01-2011 à 16:23:49    

oui exactement j'ai voulu m'en servir des viewstate juste pour garder les données inserées dans le tableau tant que l'utilisateur continue à insèrer ses lignes. après je vais faire un bouton où toutes les enregistrements vont etres insérés dans la base de donnée.
et comme ça lors d'un autre appel de la page le tableau s'affichera vide pour une autre insertion.
merci pour votre explication. si vous avez d'autres remarques merci de me faire part.

Reply

Marsh Posté le 23-01-2011 à 16:23:49   

Reply

Marsh Posté le 23-01-2011 à 17:39:04    

Mais là justement tout ce que fera le viewstate c'est permettre de conserver le nombre de lignes créées, par leur contenu. Et vu le mode de fonctionnement du viewstate (allers retours avec le client) ce serait une aberration de l'utiliser à cette fin. La session est déjà plus appropriée.
Par ailleurs, ton code contient beaucoup de réplication de code inutile et l'ajout de lignes au tableau gagnerait à se faire côté client, en JS, plutôt que par le serveur.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-01-2011 à 09:06:35    

Fermeture suite à création de doublon : http://forum.hardware.fr/hfr/Progr [...] 2257_1.htm


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed