Динамически создаваемый динамический RadioButtonsList - PullRequest
2 голосов
/ 16 сентября 2009

Я работаю над забавной формой «опроса» и пытаюсь сломать скуку, усложнив процесс. У меня есть группа списков радиобуттон, которые я хочу динамически создавать из строки имен и строки значений. Значения не проблема. Он создает все списки радиобуттон, которые я не могу понять.

Например, я мог бы просто продолжать делать это:

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

1 Ответ

0 голосов
/ 16 сентября 2009

Вам нужен способ ссылки на элементы управления 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;
}
...