2009-09-16 75 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