Nommage dynamique de variable

Résolu
bimbol18 Messages postés 7 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 19 octobre 2004 - 19 oct. 2004 à 12:02
bimbol18 Messages postés 7 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 19 octobre 2004 - 19 oct. 2004 à 14:17
Bonjour à tous.
Dans le cadre du développement d'un intranet je cherche à nommer dynamiquement mes variables en C#, comme je le ferais en PHP (@var= "bu" , @@var="bi" => bu="bi").
Pourquoi?
Je veux créer une page contenant plusieurs boutons (qui seront en fait des onglets). La liste de ces boutons est le résultat d'une requête SQL. Ce résultat est variable selon le module dans lequel je me trouve.
J'ai donc un nombre variable de bouton à afficher (dans mon UserControl "onglets").
voici un exemple de code que j'aimerai utiliser :

foreach (DataTable t in ds.Tables){
foreach (DataRow r in t.Rows){
string onglet =(string)r["onglet"];
//créer bouton
//nom du bouton = onglet, text du bouton=onglet
//méthode onClick commune à tous les boutons
}
}

Je précice tout de suite que je ne peux pas me servir tout simplement de HyperLinks, car lorsque je click sur l'onglet je doit pouvoir donner la valeur onglet à la variable de session Session["Onglet"], en raison d'une transmission des variables de session vers ASP classic.

La seule solution que j'ai pu trouver est de créer un vecteur contenant plusieurs instances de boutons et de les nommer et les rendre visible en fonctions de mes besoins, mais j'ai alors des pbms de placement.

en résumé

est-il possible de nommer des variables dynamiquement en C sharp?

4 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
19 oct. 2004 à 13:00
Hello,
Pour ce que j'en sais, il n'est pas possible de créer des variables dynamiquement, par contre voici une solution pour ton problème :
foreach (DataTable t in ds.Tables){
 foreach (DataRow r in t.Rows){
  string onglet=(string)r["onglet"];
  Button btn = new LinkButton();
  btn.Text = "Ce que tu veux";
  btn.ID = (string)r["onglet"];
  btn.Click +=new EventHandler(btn_Click);
 }
}
...
private void btn_Click(object sender, System.EventArgs e)
{
 Session["Onglet"] = ((Button)sender).ID;
}

Amicalement, SharpMao
3
cs_ousta Messages postés 95 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 2 juin 2007
19 oct. 2004 à 13:43
PlaceHolderButtons.Controls.Add(new TextBox) par exemple.
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
19 oct. 2004 à 14:00
C'est vrai, j'avais oublié. Il faut ajouter le boutton créé à ton form. Le plus simple étant, comme l'a dit ousta de palcer un PlaceHolder sur ta page aspx, puis de lui ajouter des controls.
Si tu veux un peux mieux controler leur placement, ajoute plutôt une table
//A l'intérieur de ta boucle.
TableRow tr = new TableRow();
maTable.Rows.Add(tr);

TableCell td = new TableCell();
tr.Cells.Add(td);

td.Controls.Add(btn);

Amicalement, SharpMao
3
bimbol18 Messages postés 7 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 19 octobre 2004
19 oct. 2004 à 14:17
merci bien!
en plus tout est déja dans une table. ça me sert pour mes onglets, une colonne contient l'image du bord gauche, ensuite colonne bouton, ensuite colonne bord droit.
merci encore!
0
Rejoignez-nous