【问题标题】:Dynamically created dynamic RadioButtonsList动态创建的动态 RadioButtonsList
【发布时间】:2009-09-17 00:42:13
【问题描述】:

我正在制作一个有趣的“调查”表格,并试图通过使过程过于复杂来打破单调乏味的情况。我有一组单选按钮列表,我想从一串名称和一串值动态创建它们。价值观不是问题。它正在创建我无法弄清楚的所有单选按钮列表。

例如,我可以继续这样做:

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

【问题讨论】:

    标签: c# asp.net dynamic radiobuttonlist


    【解决方案1】:

    您需要一种方法来引用对应于语言的 RadioButtonList 控件。你有一个字符串数组,所以一种方法是使用 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 方法(仅当您动态创建和添加 RadioButtonList 控件时才有意义,而不是在标记中和通过 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;
    }
    

    【讨论】:

    • 完美运行!你给了我足够的信息,我需要做一些研究才能让它发挥作用。谢谢!我考虑过使用 FindControl 来获取单选按钮列表的所有 ID,而不是在后面的代码中使用单独的列表。但我认为这超出了我目前所能处理的范围。
    • 酷,很高兴我能帮上忙。我刚刚也使用 FindControl 方法更新了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多