2009-09-16 74 views
2

我正在研究一个有趣的“调查”表单,并试图通过过程复杂化来分解乏味。我有一组radiobuttonlists,我想动态创建一个名称和一串值的字符串。这些值不是问题。它创建了我无法弄清的所有单选按钮列表。动态创建的动态RadioButtonsList

比如我可以继续这样做:

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; 

...但我不想。我想要做的事更是这样的:

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; 
    } 

回答

0

您需要一种方式来引用对应语言的单选按钮列表控件。你有一个字符串数组,所以一种方法是使用FindControl,但这不是我的偏好。

另一种方法是:

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; 
} 

的的FindControl方法(这才有意义,如果你动态地创建并添加了单选按钮列表控件,而不是标记,并通过智能感知可用),

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

工作完美!你给了我足够的信息,需要做一些研究才能使它工作。谢谢! 我想过使用FindControl来获取单选按钮列表的所有ID,而不是在后面的代码中有单独的列表。但认为这将超过我现在可以处理的。 – Mikecancook 2009-09-16 16:41:09

+0

很酷,很高兴我能帮上忙。我只是用FindControl方法更新了我的帖子。 – 2009-09-16 16:43:42