none
supprimer 1 ligne <tr> d'un tableau HTML avec un bouton C#

    General discussion

  • <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

    Bonjour tout le monde,

    Je travaille actuellement sur le développement d'un formulaire en ligne à l'aide d'une Web Part C# avec le moteur WSS 3.0 sp2 et .net 3.5 et Visual Studio. Je ne trouve pas de moyen pour supprimer 1 ligne ("<tr></tr>") d'un tableau HTML avec un bouton C#.

    Quelqu'un connait-il une technique pour réaliser cela ?

    Merci d'avance pour votre aide

    Thursday, June 23, 2011 9:20 AM

All replies

  • Bonjour,

    Voir plutôt le groupe ASP.NET ou un groupe WSS. Si on le fait sur le serveur via un bouton, il faudra préciser comment ce tableau est généré (c'est une chaine de caractères, un objet HtmlTable ou Table, une gridview, un repeater ?)

    Si c'est côté client il faut le faire en javascript.

    A bientôt peut-être dans le groupe ASP.NET ;-)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    Thursday, June 23, 2011 10:05 AM
  • mon tableau est alimenté de cette maniere (desole c'est peut etre pas pratique comme methode mais je n'est trouvé que ca pour l'instant)

     this.Controls.Add(new LiteralControl("<BR>" + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><b><font size='2'>AJOUT des droits d’accès suivants à ce répertoire partagé :</font></b></u><BR><BR><table border='1' style='border-style: ridge; border-width: 3px' width='100%' id='table1'>" +
                                      "<tr>" +
                                        "<td> <p align='center'><b>Utilisateur</b></td> " +
                                        "<td> <p align='center'><b>Droits demandés</b></td> " +
                                        "<td> <p align='center'><b>Supprimer un utilisateur</b></td> " +
                                      "</tr>"));
    
          foreach (string user_temp in list_ajout_user)
          {
            ListBox_ajout_user.Items.Add(user_temp);
    
            string[] var_user_selectionne = user_temp.Split(sep); //découpage de la chaine avec le séparateur &
            user = var_user_selectionne[0];
            droit = var_user_selectionne[1];
    
            Button Suppr_user = new Button();
            Suppr_user.Text = "Suppr";
            Suppr_user.ID = user;
            Suppr_user.Click += new System.EventHandler(this.Proc_click_Suppr_user); //appel de la procédure Proc_click_btn_visible lors du click sur un bouton                       
            this.Controls.Add(new LiteralControl("<tr ID='" + user + "' runat='server'><td> <p align='center'>" + user + "</td><td> <p align='center'>" + droit + "</td><td> <p align='center'>"));
            this.Controls.Add(Suppr_user);
            
          }
    
          this.Controls.Add(new LiteralControl("</td></tr></table>" + "<BR><BR><BR>"));<br/><br/>et voici la procedure de mon bouton Suppr que je n'arrive pas a remplir car je ne c'est pas comment gerer l'ID du bouton et l'ID du Tr car le <br/>compilateur ne reconnait pas l'ID du Tr puisqu'il est dans une balise HTML<br/><pre lang="x-c#">  private void Proc_click_Suppr_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user
        {
    
          ID_Tr.Visible = false
        }
    


    Merci encore pour votre aide


    Thursday, June 23, 2011 11:03 AM
  • Pour générer le tableau qq chose comme :

     Table t=new Table();
          TableRow r;
          TableCell c;
          foreach(string user in new String[]{"A","B","C","D"})
          {
            r=new TableRow();
            
            c=new TableCell();
            c.Text=user;
            r.Cells.Add(c);
    
            c=new TableCell();
            Button Suppr_user = new Button();
            Suppr_user.Text = "Suppr";
            Suppr_user.ID = user;
            Suppr_user.Click += new System.EventHandler(this.Proc_click_Suppr_user); //appel de la procédure Proc_click_btn_visible lors du click sur un bouton            
            c.Controls.Add(Suppr_user);
            r.Cells.Add(c);
    
            t.Rows.Add(r);
          }
          this.Form.Controls.Add(t);
    

    Pourrait être plus clair.

    A voir pour le click mais le problème est que de toute façon le tableau est crée dynamiquement et devra être recrée à chaque postback. Il me semblerait plus logique de supprimer l'utilisateur (je ne sais pas de quel source vous les prenez) et la ligne ne sera tout simplement plus générée cette utilisateur n'existant plus ?

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    Thursday, June 23, 2011 6:47 PM
  • Bonjour et merci beaucoup pour votre réponse qui m'a été bénéfique. Pour repondre a votre question, oui c'est à peu pres se que je cherche a faire. Ma variable "user" & ma variable "droit" provienne de d'une DropDownList et d'un RadioButtonList. Ses deux valeurs sont concaténé avec le separateur & afin d'etre stocké dans une ListBox caché pour etre classé par ordre alphabetique et ensuite alimenter mon tableau.

    Votre methode cidessus me semble bien plus simple, cependant j'ai un autre problème.

    L'appel de ma procedure evenement Click de mon bouton Suppr_user se trouve deja elle même dans une procedure executé lors d'un Click d'un autre bouton, et j'ai l'impression que le code qui se trouve donc dans ma procedure de Click de mon bouton Suppr_user n'est jamais executé.....

    en gros, comme ceci

    private void Proc_click_btn_ajout_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user
    {
    Table t=new Table();
       TableRow r;
       TableCell c;
       foreach(string user in new String[]{"A","B","C","D"})
       {
        r=new TableRow();
        
        c=new TableCell();
        c.Text=user;
        r.Cells.Add(c);
    
        c=new TableCell();
        Button Suppr_user = new Button();
        Suppr_user.Text = "Suppr";
        Suppr_user.ID = user;
        Suppr_user.Click += new System.EventHandler(this.Proc_click_Suppr_user); //appel de la procédure Proc_click_btn_visible lors du click sur un bouton      
        c.Controls.Add(Suppr_user);
        r.Cells.Add(c);
    
        t.Rows.Add(r);
       }
       this.Form.Controls.Add(t);
    }
     private void Proc_click_Suppr_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton suppr user
    {
    
          label_bienvenu.Text += "test" // test pour vérifier si le code de mon bouton est executé
    }

    Desole pour l'explication un peu confuse.....

    Merci de nouveau pour votre aide

     

    Friday, June 24, 2011 8:06 AM
  • Bonjour tout le monde et merci d'avance pour votre aide
    Comme énoncé dans l'intitulé, je n'arrive pas a faire appel à une procedure evenement Click d'un bouton se trouvant deja dans une procedure executée lors d'un Click d'un autre bouton. J'ai testé deux methodes :

    private void Proc_click_btn_ajout_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user[/b]
        {
          
    
          foreach (string user_temp in list_ajout_user)
          {
            ListBox_ajout_user.Items.Add(user_temp);
    
            string[] var_user_selectionne = user_temp.Split(sep); //découpage de la chaine avec le séparateur &
            user = var_user_selectionne[0];
            droit = var_user_selectionne[1];
    
            btn_suppr_user = new System.Web.UI.WebControls.Button();
            btn_suppr_user.Text = "Suppr";
            btn_suppr_user.ID = user + "&" + droit;                               
            <strong>Proc_click_btn_suppr_user(btn_ajout_user, e);</strong><br/>         this.Controls.Add(new LiteralControl("<tr><td> <p align='center'>" + user + "</td><td> <p align='center'>" + droit + "</td><td> <p align='center'>"));
            this.Controls.Add(btn_suppr_user);
            lab_bienvenu.Text += btn_suppr_user.ID;
            
          }     
         
        }
    
    
        [b]private void Proc_click_btn_suppr_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton suppr user[/b]
        
    	{
          
          lab_bienvenu.Visible = false; // test pour verifier si mon code est bien executer et si l'apelle de la procedure fonctionne en cachant un label par ex.     
          
        }
    


    et aussi

    private void Proc_click_btn_ajout_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user[/b]
        {
          
    
          foreach (string user_temp in list_ajout_user)
          {
            ListBox_ajout_user.Items.Add(user_temp);
    
            string[] var_user_selectionne = user_temp.Split(sep); //découpage de la chaine avec le séparateur &
            user = var_user_selectionne[0];
            droit = var_user_selectionne[1];
    
            btn_suppr_user = new System.Web.UI.WebControls.Button();
            btn_suppr_user.Text = "Suppr";
            btn_suppr_user.ID = user + "&" + droit;                               
            <strong> btn_suppr_user.Click += new system.EventHandler(this.Proc_click_btn_suppr_user); //appel de la procédure Proc_click_btn_visible lors du click sur un bouton</strong><br/>         this.Controls.Add(new LiteralControl("<tr><td> <p align='center'>" + user + "</td><td> <p align='center'>" + droit + "</td><td> <p align='center'>"));
            this.Controls.Add(btn_suppr_user);
            lab_bienvenu.Text += btn_suppr_user.ID;
            
          }     
         
        }
    
    
        [b] private void Proc_click_btn_suppr_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user[/b]
        
    	{
          
          lab_bienvenu.Visible = false; // test pour verifier si mon code est bien executer et si l'apelle de la procedure fonctionne en cachant un label par ex.     
          
        }
    

    La procédure est bien appelée et exécuté lorsque j'utilise la premiere methode mais dès que je clique sur mon bouton ajouté. Pour schématiser :
    Quand je clique sur mon bouton AJOUT, un tableau est généré avec l'utilisateur sélectionné provenant d'une DropDownList. A chaque nouvel utilisateur selectionné puis validé par mon bouton AJOUT une nouvelle ligne est ajouté a mon tableau avec en bout de ligne un bouton suppr (comme définit dans le "foreach" ci dessus) C'est donc en cliquant sur un des boutons suppr d'une des lignes du tableau qu'il faudrait qu'une autre procédure soit exécutée. Si je m'explique mal dite le moi je comprendrai tout a fait
    Encore merci pour votre aide

     

     

    • Merged by Ciprian DuduialaOwner Tuesday, June 28, 2011 6:35 AM thread double - ne posez pas la même question deux fois
    Monday, June 27, 2011 2:44 PM
  • Bonjour,

    Où est généré ce fameux tableau ? Le problème est très certainement que lorsque des contrôles sont générés dynamiquement, il faut que l'ordonnancement soit soigneusement surveillé. Je pense qu'il est possible que le gestionnaire soit recré trop tard. Au moment où l'évènement est traité, le gestionnaire n'existe peut-être pas encore et n'est donc pas déclenché.

    Comme indiqué précédemment je pense qu'il serait plus simple de jouer sur les données plutôt que directement sur le code généré. Egalement avez-vous envisagé d'utiliser par exemple un contrôle Repeater pour générer le tableau ? Eventuellement j'essaierai de vous faire une petite démo sur cette base ce midi...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    Tuesday, June 28, 2011 9:11 AM