Créer un tableau dynamiquement

Résolu
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 - 10 nov. 2004 à 22:54
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 - 13 nov. 2004 à 23:42
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

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 nov. 2004 à 22:18
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
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 nov. 2004 à 12:47
<%@ 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
0
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 2
11 nov. 2004 à 21:15
Bonsoir.

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

Gérard
0
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 2
11 nov. 2004 à 22:43
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 !!)
0

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

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 nov. 2004 à 23:19
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 nov. 2004 à 00:11
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 nov. 2004 à 00:42
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 nov. 2004 à 00:47
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
0
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 2
12 nov. 2004 à 11:55
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.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 nov. 2004 à 13:26
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
0
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 2
12 nov. 2004 à 16:37
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

--------------
0
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 2
13 nov. 2004 à 22:16
Bonsoir.

Ca marche. Super. Merci beaucoup pour ton aide.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
13 nov. 2004 à 22:49
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
0
GerardL08 Messages postés 27 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 24 mars 2006 2
13 nov. 2004 à 23:42
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
@+
0
Rejoignez-nous