c# - 动态创建动态 RadioButtonsList

标签 c# asp.net dynamic radiobuttonlist

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

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

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

最佳答案

您需要一种方法来引用与语言相对应的 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;
}

关于c# - 动态创建动态 RadioButtonsList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1433943/

相关文章:

用户输入数据的 C# 存储

c# - OpenFileDialog 在显示浏览对话框之前抛出 System.IO.FileNotFoundException

c# - 有什么方法可以控制 TableLayoutPanel 中单元格边框的粗细?

c# - 类型 'Contains' 1[System.Object] 上不存在方法 'System.Data.Linq.DataQuery`

javascript - 如何将动态数据从sql插入到chartjs堆叠条形图javascript中

c# - 转换 WebMatrix DynamicRecord 或检索底层 IDictionary<string,object>

c# - 我如何使用 Xamarin 为 Android 使用 SQLiteAsyncConnection?

asp.net - ajax 选项卡容器 CSS 未正确显示

c# - 如何在下拉列表中添加占位符 C#

c# - 参数 null 是 ASP Controller