ASP.NET - CRÉER UN TABLEAU HTML DYNAMIQUEMENT À PARTIR DU CODE BEHIND

ctof3552 Messages postés 28 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 25 avril 2005 - 22 avril 2004 à 14:11
tidiosky Messages postés 9 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 12 février 2012 - 12 févr. 2012 à 18:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9028-asp-net-creer-un-tableau-html-dynamiquement-a-partir-du-code-behind

tidiosky Messages postés 9 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 12 février 2012
12 févr. 2012 à 18:34
Vraiment pour moi qui suis un débutant en asp.NEt ton code m'a beaucoup aidé . encore mercii
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
19 juin 2008 à 16:48
Je n'ai poas joué avec ces options de colspan depuis le code Behind
cs_Maroxye Messages postés 177 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 16 octobre 2012
19 juin 2008 à 16:24
Merci Fabrice,

Mais en fait, pour ceux que ça intéresse, lorsqu'on lit un tableau ainsi, il ne faut pas utiliser ceci :

==> If tblDetails.Rows(a).Cells(15).InnerText then...........

==> col0.Attributes.Add("colspan", "20")

On dirait qu'il ne reconnait plus la colonne 15 qui est plutôt une seule colonne(colspan)....
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
19 juin 2008 à 10:33
Bonjour,
En VB.NET les index partent de 1 à X
X étant le nombre d'items dans une liste
En C#, c'est de 0 a X-1

Voila certainement la raison de cette erreur.
Fabrice
cs_Maroxye Messages postés 177 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 16 octobre 2012
18 juin 2008 à 22:10
Merci Fabrice pour ce post!

Je suis cependant confronté à une erreur lorsque je veux lire le contenu de ma table. J'ai l'erreur suivante : Specified argument was out of the range of valid values (Parameter name: index ). Lorsque je liste la colonne 0, ça fonctionne mais dès que je place un compteur pour lister toutes les valeurs, j'ai l'erreur :

For a = 1 To tblDetails.Rows.Count - 1
Session("monTableau") = Session("monTableau") & "-" & tblDetails.Rows(a).Cells(1).InnerText
Next


Quelle serait la meilleure façon de faire une boucle pour liste le contenu de la table créée plutôt?

Merci!
infodevlo Messages postés 4 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 3 janvier 2010
22 mars 2008 à 19:38
merci bc mais j'ai une question si je veux utiliser un lien par parametre dan s macase.innerhtml
comment faire ??
par ex :
macase.Innerhtml="<a href='travail.aspx?numero='
comment faire pour affecter une valeur a ce parametre
CathieMithra85 Messages postés 2 Date d'inscription jeudi 23 novembre 2006 Statut Membre Dernière intervention 21 février 2008
25 févr. 2008 à 20:08
Un gros gros merci!!!!!!
ecthelion_77 Messages postés 1 Date d'inscription mardi 26 septembre 2006 Statut Membre Dernière intervention 24 septembre 2007
24 sept. 2007 à 19:11
Concernant la question de JUL_ARSOE, il est en effet possible de rajouter des infos afin d'appliquer un CSS :

Dim ligne As New HtmlTableRow()
Dim cellule As New HtmlTableCell()

cellule.Attributes.Item("class") = "maCell"
ligne.Attributes.Item("class") = "maLigne"
ligne.Cells.Add(cellule)
table.Rows.Add(ligne)

le résultat est :
<tr class="maLigne>
<td class="maCell">
</td>
</tr>

Il suffit ensuite de définir les classes dans le css ;)

Merci à cette source qui m'a bien aidée !!!
leproc Messages postés 81 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 22 octobre 2008
7 août 2007 à 13:18
Oui c'est possible, il suffit juste de créer un controle pour chaque case
/// code tableau en c#
HtmlTableRow MaLigne = new HtmlTableRow();
HtmlTableCell macase = new HtmlTableCell();
HtmlTableCell macase2 = new HtmlTableCell();
HtmlTableCell macase3 = new HtmlTableCell();
//-------------------------------------------
TextBox text = new TextBox();
Button boutton = new Button();
//-------------------------------------------
boutton.Text = "Hello !";
//-------------------------------------------
macase.Width = "10%";
macase2.Width = "100";
//-------------------------------------------
macase.InnerHtml = "WWW.ASPFR.COM";
//-------------------------------------------
macase2.Controls.Add(text);
macase3.Controls.Add(boutton);
//-------------------------------------------
MaLigne.Cells.Add(macase);
MaLigne.Cells.Add(macase2);
MaLigne.Cells.Add(macase3);
//------------------------------------------
Table1.Rows.Add(MaLigne);
snatch13 Messages postés 1 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 22 juin 2007
22 juin 2007 à 15:14
Est-il possible de mettre des asp control dans chaque case?
Jul_ARSOE Messages postés 6 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 13 juin 2007
13 juin 2007 à 12:07
Merci pour ce bout de code. il y a juste une chose que je n'ai pas trouvé : comment y appliquer le CSS voulu au élément de la table ?

la seule chose que j'ai trouvé c'est de faire :

MaLigne.Style.value = "text-align:center;background......."
Maligne.Attributes.CssStyle.value = "MaClasseCSS"->ca marche pas

C'est à dire que je suis obligé de recopier tout ce qu'il y a dans la partie du CSS que je veux appliquer, je n'arrive pas à passer le nom de la class CSS. Une solution ?
cs_Azo Messages postés 4 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 18 février 2009
5 avril 2007 à 13:54
Il te fait recreer ces cellules dans ton page_load ou le page_init, c'ets vrai pourt tout composant créé dynamiquement.

Bon courage,
Emilien
cs_pee Messages postés 2 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 11:19
j'arrive à ajouter dynamiquement des cellules à un tableau de la même façon décrite plus haut, ainsi que des composants dans le style checkbox, dropdownlist, ...
Ce qui m'embête, c'est que les cellules qui sont créées dynamiquement uniquement au premier chargement de la page (If Not IsPostBack) disparaissent au premier postback.
quelqun a-t'il une idée du problème.
J'ai bien essayé sans la close "If Not IsPostBack". Dans cette condition pas de problème de visualisation mais si un checkbox a été coché, malgré qu'il réapparaisse coché, si je teste sa valeur, elle est égale à "False" ce qui por moi est logique puisque j'ai rechargé le tableau à l'état d'initialisation.
Drakulv Messages postés 1 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 25 octobre 2006
25 oct. 2006 à 11:37
Merci beaucoup pour cette source !
Je m'en sortais pas avec un Datagrid
LDvper Messages postés 1 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 25 janvier 2005
25 janv. 2005 à 14:28
Il est possible de passer par un webcontrol pour générer un tableau dynamiquement.
Cela permet entre autre de pouvoir insérer des textbox dans les cellules.

' ------------------------------
' Dans le fichier xxx.ASPX



....

' ------------------------------
' Dans le fichier xxx.aspx.VB
...
Protected WithEvents MonTableau As System.Web.UI.WebControls.Table
....

'et dans la fonction de chargement par exemple :

MonTableau.Width = Unit.Percentage(100)
MonTableau.CellPadding = 1
MonTableau.CellSpacing = 2
MonTableau.BorderWidth = Unit.Point(0)

' On ne chargera qu'une seule ligne dans ce tableau
Dim colonne As Integer, ligne As Integer

For ligne = 0 To 0
Dim Maligne As New TableRow()
' On ajoutera 10 case dans ce tableau
For colonne =0 To 9
Dim MaCase As New TableCell()
MaCase.Width = "10%"
MaCase.Text = "WWW.ASPFR.COM"
Maligne.Cells.Add(MaCase)
Next
MonTableau.Rows.Add(Maligne)
Next

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

'Autre exemple avec cette fois les données reprises à partir d'un dataset
Dim Maligne2 As New TableRow
' On ajoutera autant de textbox dans cette ligne que de champs dans la table sélectionnée
For colonne = 0 To ds.Tables(0).Columns.Count - 1
Dim MaCase As New TableCell
Dim tb As New TextBox
tb.ID = "txt_" & ds.Tables(0).Columns(colonne).ColumnName
MaCase.Width = Unit.Percentage(10)
MaCase.Controls.AddAt(0, tb)
Maligne2.Cells.Add(MaCase)
Next
MonTableau.Rows.Add(Maligne2)
....
' ------------------------------
dionysos6868 Messages postés 310 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 9 juin 2005 1
22 mai 2004 à 11:38
y aurais t'il moyen de fair la fonction onmouseover et onmouseout car je ne trouve pas
dionysos6868 Messages postés 310 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 9 juin 2005 1
27 avril 2004 à 20:03
dsl de cette question j'etais mal reveiller lol
j'ai mal lu le code

merci tout de meme
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
27 avril 2004 à 18:58
Avec le Width de la Case (Cellule).

F___
dionysos6868 Messages postés 310 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 9 juin 2005 1
27 avril 2004 à 16:44
Merci beaucoup j'avais poser cette question sur le forum avant de voir ta source et oui je n'avais pas bien chercher.

ta source ma enorment servie moi qui cherche a séparer au max mon code de ma page internet la c'est bon

parcontre comment donne tu la longeur des cellule ?

merci
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
22 avril 2004 à 14:24
Dans ce cas il faut plutot passer par un Datatable ou faire un Data Repeater avec en répétition tes celulles.

F___
ctof3552 Messages postés 28 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 25 avril 2005
22 avril 2004 à 14:11
je trouve ce petit bout de code fort interessant !!!
cependant, est il possible d'ajouter des composants aux cellules du tableau, tel que les textbox par exemple ?
j'ai essayé, mais a marche po...
Rejoignez-nous