2009-09-16 6 views
2

Je travaille sur un formulaire de sondage amusant et je tente de briser l'ennui en compliquant le processus. J'ai un groupe de radiobuttonlists que je veux créer dynamiquement à partir d'une chaîne de noms et d'une chaîne de valeurs. Les valeurs ne sont pas un problème. C'est créer toutes les listes de radiobutton que je ne peux pas comprendre.Dynamique créé dynamique RadioButtonsList

Par exemple, je pouvais continuer à faire ceci:

string[] level = {"Expert", "Proficient", "Limited Experience", "No Experience"}; 

    this.rblCSharp.Items.Clear(); 
    for (int i = 0; i < level.GetLength(0); i++) { 
     this.rblCSharp.Items.Add(level[i]); 
    } 
    this.rblCSharp.RepeatDirection = RepeatDirection.Horizontal; 


    this.rblVbNet.Items.Clear(); 
    for (int i = 0; i < level.GetLength(0); i++) 
    { 
     this.rblVbNet.Items.Add(level[i]); 
    } 
    this.rblVbNet.RepeatDirection = RepeatDirection.Horizontal; 

... mais je ne veux pas. Je veux faire quelque chose comme ceci:

string[] level = {"Expert", "Proficient", "Limited Experience", "No Experience"}; 

    string[] language = { "CSharp", "VbNet", "VbClassic", "Crystal", "Ssrs", "Sql2005", "UiWeb" }; 

    for (int j = 0; j < language.GetLength(0); j++) { 
     this.rbl[j].Items.Clear(); 
     for (int i = 0; i < level.GetLength(0); i++) { 
      this.rbl[j].Items.Add(level[i]); 
     } 
     this.rbl[j].RepeatDirection = RepeatDirection.Horizontal; 
    } 

Répondre

0

Vous avez besoin d'un moyen de référencer les contrôles de RadioButtonList qui correspondent aux langues. Vous avez un tableau de chaînes, donc un moyen serait d'utiliser FindControl mais ce ne serait pas ma préférence.

Une autre façon serait:

var languageControls = new List<RadioButtonList> { rblCSharp, rblVbNet, rblVbClassic, rblCrystal, rblSsrs, rblSql2005, rblUiWeb }; 

foreach(var rbl in languageControls) 
{ 
    rbl.Items.Clear(); 
    // this could be a foreach instead, but I kept your original code 
    for (int i = 0; i < level.GetLength(0); i++) 
    { 
     rbl.Items.Add(level[i]); 
    } 
    rbl.RepeatDirection = RepeatDirection.Horizontal; 
} 

L'approche FindControl (ce qui n'a de sens que si vous dynamiquement créé et ajouté les contrôles de RadioButtonList, plutôt que d'être disponible dans le balisage et via IntelliSense)

string[] level = {"Expert", "Proficient", "Limited Experience", "No Experience"}; 
string[] language = { "CSharp", "VbNet", "VbClassic", "Crystal", "Ssrs", "Sql2005", "UiWeb" }; 

foreach (string lang in language) 
{ 
    RadioButtonList rbl = (RadioButtonList)FindControl("rbl" + lang); 
    if (rbl == null) 
     continue; // keep going through the rest, or throw exception 

    rbl.Items.Clear(); 
    // this could be a foreach instead, but I kept your original code 
    for (int i = 0; i < level.GetLength(0); i++) 
    { 
     rbl.Items.Add(level[i]); 
    } 
    rbl.RepeatDirection = RepeatDirection.Horizontal; 
} 
+0

Travaillé parfaitement! Vous m'avez donné juste assez d'informations pour faire un peu de recherche pour le faire fonctionner. Merci! J'ai pensé utiliser FindControl pour obtenir tous les identifiants des radiobuttonlists au lieu d'avoir une liste séparée dans le code derrière. Mais je pensais que ce serait plus que ce que je pouvais supporter à ce stade. – Mikecancook

+0

Cool, content d'avoir pu aider. Je viens juste de mettre à jour mon post avec l'approche FindControl. –