Créer un tableau dynamiquement [Résolu]

Signaler
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
-
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
-
Je voudrai créer un tableau dynamiquement (en C#) dans une deuxième page, à partir d'une page dans laquelle je sélectionne dans des checkbox les intitulé de mes lignes, tandis que le nombre de colonne est fixe.
En fonction des chekbox sélectionnées, le tableau dans la page deux comprend autant de ligne que de cases cochées !!
Qui peut m'aider ?

14 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
TableCell Cell = new TableCell();
Cell.Controls.add(new LiteralControl("Rien"));
this.Cells.Add(Cell);

il va te falloir faire la meme chose je pense pour toute les Cellule

Cyril
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">
    public class MyRow : System.Web.UI.WebControls.TableRow 
    {
        public MyRow(string param1, string param2)
        {
            TableCell Cell1 = new TableCell(param1);
            TableCell Cell2 = new TableCell(param2);
            this.Cells.Add(Cell1);
            this.Cells.Add(Cell2);
        }
    }

    void Page_Load(object sender, EventArgs e)
    {
        Table MyTable = new Table(); 
        TableRow MyRow; 
        foreach (CheckBox Check in CheckBoxCollection)
        {
            if (Check.Checked)
            {
                MyRow = new MyRow("Cyril", "Durand");
                MyTable.Rows.Add(MyRow);
            }
        }
        PlaceHolder1.Controls.Add(MyTable);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>

    <form id="form1" runat="server">
    

        
    

    </form>

</html>


j'ai pas testé ce code, mais ca devrait marcher, la seule chose qui reste à modifier c'est la ligne
foreach (CheckBox Check in CheckBoxCollection)

il faut que CheckBoxCollection soit remplis de tes Checkbox d'avant, si tu y arrives pas, montre moi la page ou tu as les checkbox, et je te dirais

@+

Cyril
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
2
Bonsoir.

Je vais étudier ton code et le tester. Je te dirai si c'est OK. Mais d'avance, je te remercie.
@+

Gérard
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
2
Effectivement, j'ai un pb avec CheckBoxCollection.
Pour l'exemple, prend une page (je travaille avec VS 2003) et place y trois checkBox avec trois intitulés style :
ex1, ex2 et ex3 et un bouton "envoyer" pour aller vers la page qui génére le tableau.
On doit retrouver ces trois intitulés dans les entetes de trois lignes si les trois checkbox sont cochés, en clair les intitulés des checkbox cochés, avec les lignes correspondantes dans le tableau généré dans une page distincte.

Encore merci (je ne suis pas un crac !!)
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ok, il faut que tu traite les données de ces checkbox durant la premiere page, soit tu les rentre dans une variable session, soit tu utilises un request.form soit encore plein de chose :)

pour ce qui est des Checkbox, il y en a un nombre fixe ? ils sont generé par le code vb ou directement dans le code html, le plus simple pour faire ce genre de chose est d'ajouter tes checkbox par le code, ou alors tu as la possibillité d'utiliser un checkboxlist, je t'explique avec un checkboxlist tout à l'heure.

@+

Cyril
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Default.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">
    public class MyRow : System.Web.UI.WebControls.TableRow
    {
        public MyRow(string param1)
        {
            TableCell Cell = new TableCell("rien");
            this.Cells.Add(Cell);
            Cell = new TableCell(param1);
            this.Cells.Add(Cell);
        }
    }

    void Page_Load(object sender, EventArgs e)
    {
        Table MyTable = new Table();
        TableHeaderRow HeaderRow = new TableHeaderRow();
        TableHeaderCell THC = new TableHeaderCell();
        THC.Text = @"pas grand chose";
        HeaderRow.Cells.Add(THC);
        THC = new TableHeaderCell();
        THC.Text = @"Valeur du CheckBox";
        HeaderRow.Cells.Add(THC);
        MyTable.Rows.Add(HeaderRow);

        TableRow myRow;
        foreach (ListItem Check in ((CheckBoxList)Session["CheckBoxList"]).Items)
        {
            if (Check.Selected)
            {
                myRow = new MyRow(Check.Text);
                MyTable.Rows.Add(myRow);
            }
        }
        PlaceHolder1.Controls.Add(MyTable);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>

<form id="form1" runat="server">

</form>

</html>


Default2.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">

    void Button1_Click(object sender, EventArgs e)
    {
        Session["CheckBoxList"] = (object)this.CheckBoxList1;
        Response.Redirect(ResolveClientUrl("Default.aspx"));
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>

    <form id="form1" runat="server">
    

        
        
        
        
        
        
        
    

    </form>

</html>


Dans Default2.aspx, la méthode ResolveClientUrl ne doit pas exister avec le fram 1.1 il faut la remplacer par ResolveUrl, je travail avec Whidbey donc la framework 2; je pense pas qu'il y ait d'autres incompatibilité, peut etre au niveau du checkboxlist.

J'espere que tu es assez familier avec les langage objet, notamment avec les classes, je sais pas si t'as compris ce que venait faire la classe MyRow, si tel n'est pas le cas, je t'expliquerais

@+

Cyril
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Petit modif, j'ai pensé ca car j'avais laissé ma page dans un onglet de Firefox, j'ai fait F5 et ca a planté :)

j'ai donc modifié un petit peu le code, pour verifier qu'il y ait bien une variable session chez le client, sinon retour à la case depart

à modifier dans Default.aspx

void Page_Load(object sender, EventArgs e)
{
Table MyTable = new Table();
TableHeaderRow HeaderRow = new TableHeaderRow();
TableHeaderCell THC = new TableHeaderCell();
THC.Text = @"pas grand chose";
HeaderRow.Cells.Add(THC);
THC = new TableHeaderCell();
THC.Text = @"Valeur du CheckBox";
HeaderRow.Cells.Add(THC);
MyTable.Rows.Add(HeaderRow);

TableRow myRow;
if (!Session["CheckBoxList"] == nothing)
{
foreach (ListItem Check in ((CheckBoxList)Session["CheckBoxList"]).Items)
{
if (Check.Selected)
{
myRow = new MyRow(Check.Text);
MyTable.Rows.Add(myRow);
}
PlaceHolder1.Controls.Add(MyTable);
}
}
else
{
Response.redirect(ResolveClientUrl("Default2.aspx"));
}
}

Cyril
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Décidemment j'accumule les erreurs moi :D
ne pas tenir compte du post precedent

if (Session["CheckBoxList"] != null)
{
foreach (ListItem Check in ((CheckBoxList)Session["CheckBoxList"]).Items)
{
if (Check.Selected)
{
myRow = new MyRow(Check.Text);
MyTable.Rows.Add(myRow);
}
PlaceHolder1.Controls.Add(MyTable);
}
}
else
{
Response.Redirect(ResolveClientUrl("Default2.aspx"));
}
}

Cyril
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
2
Bien. J'ai essayé mais je n'ai pas encore tout compris. Je vais eplucher ton code.
Pour le moment j'ai le message d'erreur suivant :
-----------
Message d'erreur du compilateur: CS0246: Le type ou le nom d'espace de noms 'TableHeaderRow' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)

Erreur source:



Ligne 18 : {
Ligne 19 : Table MyTable = new Table();
Ligne 20 : TableHeaderRow HeaderRow = new TableHeaderRow();
Ligne 21 : TableHeaderCell THC = new TableHeaderCell();
Ligne 22 : THC.Text = @"pas grand chose";
------------

Encore merci.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ton erreur vient du fait que j'ai employé la framework 2.0 remplace les par des TableRow et TableCell, il doit pas encore y avoir des TableHeaderCell etc... dans la fram 1.1 :)

J'espere qu'il n'y aura encore pas trop d'incompatibilités du genre

Cyril
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
2
toujours un pb que je ne maitrise pas !!
Merci de ton aide

----------------

Message d'erreur du compilateur: CS1502: La méthode surchargée correspondant le mieux à 'System.Web.UI.WebControls.TableCell.TableCell(System.Web.UI.HtmlTextWriterTag)' possède des arguments non valides

Erreur source:



Ligne 6 : public MyRow(string param1)
Ligne 7 : {
Ligne 8 : TableCell Cell = new TableCell("rien");
Ligne 9 : this.Cells.Add(Cell);
Ligne 10 : Cell = new TableCell(param1);


Fichier source: C:\Inetpub\wwwroot\Default.aspx Ligne: 8

--------------
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
2
Bonsoir.

Ca marche. Super. Merci beaucoup pour ton aide.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ouf :) en voyant ton message, j'ai cru qu'il y aurait encore eu une incompatibilité :)

Si ca te va, tant mieux, si tu veux des explications, hésite pas

@+

Cyril
Messages postés
27
Date d'inscription
mercredi 16 octobre 2002
Statut
Membre
Dernière intervention
24 mars 2006
2
encore merci pour ton aide. Et si j'ai besoin je n'hésiterai pas à te demander. Je vais maintenant étudier et comprendre ce code.

Cordialement
@+