Как перебрать некоторые метки ASP.NET, чтобы установить их атрибуты? - PullRequest
2 голосов
/ 26 мая 2010

Как мне сделать это в цикле.

protected void ddlTool_SelectedIndexChanged(object sender, EventArgs e)
{

    lblTool1.Visible = false;
    txtTool1.Visible = false;
    lblTool2.Visible = false;
    txtTool2.Visible = false;
    lblTool3.Visible = false;
    txtTool3.Visible = false;
    lblTool4.Visible = false;
    txtTool4.Visible = false;
    lblTool5.Visible = false;


    if (ddlTool.SelectedValue == "1")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
    }
    if (ddlTool.SelectedValue == "2")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
        lblTool2.Visible = true;
        txtTool2.Visible = true;
    }
    if (ddlTool.SelectedValue == "3")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
        lblTool2.Visible = true;
        txtTool2.Visible = true;
        lblTool3.Visible = true;
        txtTool3.Visible = true;
    }
    if (ddlTool.SelectedValue == "4")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
        lblTool2.Visible = true;
        txtTool2.Visible = true;
        lblTool3.Visible = true;
        txtTool3.Visible = true;
        lblTool4.Visible = true;
        txtTool4.Visible = true;
    }

Ответы [ 5 ]

7 голосов
/ 26 мая 2010

Вместо отдельной переменной для каждого текстового поля и метки, имейте их коллекцию - будь то List<T> или массив или что-то еще.

Тогда вы можете сделать:

// Potentially use int.TryParse here instead
int visibleLabels = int.Parse(ddlTool.SelectedValue);
for (int i = 0; i < labels.Count; i++)
{
    labels[i].Visible = (i < visibleLabels);
    textBoxes[i].Visible = (i < visibleLabels);
}

(В качестве альтернативы используйте два цикла: один для установки некоторых свойств Visible в значение true, а другой для установки некоторых в значение false.)

2 голосов
/ 26 мая 2010

Вы можете получить доступ к элементу управления по его имени, используя

container.Controls["nameofcontrol"]

Технически, вы можете использовать это для поиска вашего контроля

(непроверенный код)

for(int index = 1; index <= Convert.ToInt32(ddlTool.SelectedValue); index++)
{
    this.Controls["lblTool" + index.ToString()].Visible = true;
    this.Controls["txtTool" + index.ToString()].Visible = true;
}
1 голос
/ 26 мая 2010

Используйте UserControl для каждого набора подключенных элементов управления, а затем включите / отключите UserControl вместо всех компонентов управления. Это классическая базовая модульность вашего пользовательского интерфейса.

Обратите внимание, что для этого все еще потребуется небольшой «избыточный» код, потому что вы работаете с необычной парадигмой пользовательского интерфейса, включив до выбранного значения ddlTool вашего элемента управления. Например, создайте свой пользовательский элемент управления, содержащий только Label и TextBox. Назовите это LabeledTextBox или что-то подобное. Затем вы должны создать коллекцию помеченных текстовых полей и включить их до int.Parse(ddlTool.SelectedValue) - 1.

0 голосов
/ 26 мая 2010

Вот пример без проверки ошибок, но он должен соответствовать функциональности вашего кода.

protected void ddlTool_SelectedIndexChanged(object sender, EventArgs e) 
{
  int selectedValue = int.Parse(ddlTool.SelectedValue.ToString());
  for (int i = 1; i <= 4; ++i)
  {
    bool state = i <= selectedValue;
    this.Controls["lblTool" + i.ToString()].Visible = state;
    this.Controls["txtTool" + i.ToString()].Visible = state;
  }
}
0 голосов
/ 26 мая 2010
foreach (Control ctrl in this.Controls)
{
    int index = (int)ctrl.Name.Substring(ctrl.Name.Length - 1);
    int maxIndex = (int)ddlTool.SelectedValue;
    ctrl.Visible = (index <= maxIndex);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...