OVH Cloud OVH Cloud

assigner le resultat d'une méthode

6 réponses
Avatar
grome
Bonjour,

J'ai un soucis pour assigner le resultat d'un métode.
Voilà j'ai créé une classe qui possède une méthode renvoyant un objet Table
de System.Web.UI.WebControls.

Public Class MaClasse
{
Public System.Web.UI.WebControls.Table ConstruireTableau()
{
Table ObjetTable = new Table();
TableRow Ligne = new TableRow();
TableCell Cellule = new TableCell();
Cellule.text = "bla bla bla"
Ligne.Cells.add(cellule);
ObjetTable.rows.add(Ligne);
//
// etc ...
//
return(ObjetTable )
}
}

Le code suivant est présent dans la web form. Il s'execute sans lever
d'exception. De plus l'int i contient bien le nombre de ligne. J'aimerai
savoir si il y a une méthode suplémentaire à appeler pour voir mon tableau
construit ou bien si c'est dans la manière d'assigner le résultat qu'il y a
un problème.
Je voudrais être sur que Table1 ne fait pas référence à un autre Table.
Voilà j'espère avoir été assezclair. Dernière précision le bout de code qui
suit est placé sur un bouton. Sur l'évènement click je veux déclencher la
construction du tableau (objet table) et son affichage.

Private void button2_click(object sender; System.EventsArgs e)
{
MaClasse Catalogue = new MaClasse();
// Table1 est le controle table qui est déjà sur ma web form.
Table1 = Catalogue.ConstruireTableau();
int i = Table1.Rows.count();
Label1.text = "si si, c'est bien fini..." + i.ToString();
}


Merci d'avance

6 réponses

Avatar
Matthieu GD
grome wrote:
Bonjour,

J'ai un soucis pour assigner le resultat d'un métode.
Voilà j'ai créé une classe qui possède une méthode renvoyant un


objet Table
de System.Web.UI.WebControls.

Public Class MaClasse
{
Public System.Web.UI.WebControls.Table ConstruireTableau()
{
Table ObjetTable = new Table();
TableRow Ligne = new TableRow();
TableCell Cellule = new TableCell();
Cellule.text = "bla bla bla"
Ligne.Cells.add(cellule);
ObjetTable.rows.add(Ligne);
//




Outre les fautes de syntaxe, il faut sans doute ajouter votre nouvel
objet Table aux contrôles de la page :
Page.Controls.Add(Table1);

Matthieu
Avatar
grome
Justement le contrôle Table est déjà présent sur la page.
En fait j'ai résolu le problème en passant le contrôle que j'ai placé sur la
page en paramètre de la méthode ConstruireTableau.
C'est peut être pas très propre mais çà marche. Par contre je comprend
toujours pas ce qui fait que le code précedent ne fonctionnait pas.
Je pense que c'est dans la manière d'assigner le résultat de la méthode.

Outre les fautes de syntaxe, il faut sans doute ajouter votre nouvel
objet Table aux contrôles de la page :
Page.Controls.Add(Table1);





Matthieu




Avatar
Simon Mourier [MS]
En effet, si le contrôle table est déja existant (crée par le designer de
visual studio sans doute?), lui réassigner une valeur le détruit et en
recrée un qui n'est donc plus sur la page. Il vaudrait donc mieux faire:

Public void ConstruireTableau(Table table)
{
TableRow Ligne = new TableRow();
TableCell Cellule = new TableCell();
Cellule.text = "bla bla bla"
Ligne.Cells.add(cellule);
table.rows.add(Ligne);
//
// etc ...
//
}

Private void button2_click(object sender; System.EventsArgs e)
{
MaClasse Catalogue = new MaClasse();
Catalogue.ConstruireTableau(Table1);
int i = Table1.Rows.count();
Label1.text = "si si, c'est bien fini..." + i.ToString();
}

Simon.

"grome" a écrit dans le message de news:
41c7cee6$0$5028$
Justement le contrôle Table est déjà présent sur la page.
En fait j'ai résolu le problème en passant le contrôle que j'ai placé sur
la page en paramètre de la méthode ConstruireTableau.
C'est peut être pas très propre mais çà marche. Par contre je comprend
toujours pas ce qui fait que le code précedent ne fonctionnait pas.
Je pense que c'est dans la manière d'assigner le résultat de la méthode.

Outre les fautes de syntaxe, il faut sans doute ajouter votre nouvel
objet Table aux contrôles de la page :
Page.Controls.Add(Table1);





Matthieu








Avatar
Zazar
Bonjour,

2 petites précisions :

En effet, si le contrôle table est déja existant (crée par le designer de
visual studio sans doute?), lui réassigner une valeur le détruit et en
recrée un qui n'est donc plus sur la page.



Le fait de réaffecter une nouvelle valeur, ne détruit pas l'ancienne table,
elle existe toujours car elle est référencée dans la collections Controls de
la feuille.

Il vaudrait donc mieux faire:

Public void ConstruireTableau(Table table)
{



Ici, il pourrait être utile de placer un table.Rows.Clear() selon les
besoins.


TableRow Ligne = new TableRow();
TableCell Cellule = new TableCell();
Cellule.text = "bla bla bla"
Ligne.Cells.add(cellule);
table.rows.add(Ligne);
//
// etc ...
//
}



--

Zazar
Avatar
Simon Mourier [MS]
Euh, le fait de faire un new Table() crée bien une nouvelle table qui n'est
pas dans les contrôles de la page. Et la référence est bien réinitialisée.
Ca ne détruit pas l'ancienne table (mais sa référence ok), mais comme elle
ne contenait rien c'est pour cela que le résultat n'est pas le bon.

Simon.

"Zazar" a écrit dans le message
de news:
Bonjour,

2 petites précisions :

En effet, si le contrôle table est déja existant (crée par le designer de
visual studio sans doute?), lui réassigner une valeur le détruit et en
recrée un qui n'est donc plus sur la page.



Le fait de réaffecter une nouvelle valeur, ne détruit pas l'ancienne
table,
elle existe toujours car elle est référencée dans la collections Controls
de
la feuille.

Il vaudrait donc mieux faire:

Public void ConstruireTableau(Table table)
{



Ici, il pourrait être utile de placer un table.Rows.Clear() selon les
besoins.


TableRow Ligne = new TableRow();
TableCell Cellule = new TableCell();
Cellule.text = "bla bla bla"
Ligne.Cells.add(cellule);
table.rows.add(Ligne);
//
// etc ...
//
}



--

Zazar





Avatar
Zazar
Bonsoir,

Euh, le fait de faire un new Table() crée bien une nouvelle table qui


n'est
pas dans les contrôles de la page.



Je n'ai pas dit le contraire.

Et la référence est bien réinitialisée.



Disons plutôt que la variable référence un nouvel objet.

Ca ne détruit pas l'ancienne table (mais sa référence ok), mais comme elle
ne contenait rien c'est pour cela que le résultat n'est pas le bon.



Exact.

J'ai l'impression que nous ne nous sommes pas compris :
J'ai compris que vous disiez que :
Si on a une WebForm qui contient un membre :
protected Table Table1;
et qu'on a un .aspx qui déclare une table coté serveur, d'ID Table1, si on
faisait
Table1 = new Table();
vous prétendiez que l'ancienne table (celle déclarée dans le .aspx) était
détruite.
Je disais alors que ce n'était pas le cas.

--
Zazar