1

我正在使用一些控件动态填充 ControlPanel ...有些是 DropDowns,有些是 TextBoxes:

//inputArray is a JsonArray (thus the SelectToken methods)

foreach (var item in inputArray)
{
    //Create Label
    Label LabelTitle = new Label();
    LabelTitle.Text = (string)item.SelectToken("title");
    Panel_Controls.Controls.Add(LabelTitle);

    //Create Control
    if ((string)item.SelectToken("type") == "textinput")
    {
        TextBox TextBox_Control = new TextBox();
        TextBox_Control.ID = (string)item.SelectToken("title");
        Panel_Controls.Controls.Add(TextBox_Control);
    }
    if ((string)item.SelectToken("type") == "dropdown")
    {
        DropDownList DropDown_Control = new DropDownList();
        DropDown_Control.DataSource = dropDownData;
        DropDown_Control.DataBind();
        Panel_Controls.Controls.Add(DropDown_Control);
    }
}

稍后,我需要获取 DropDown 和文本框字段的值。我可以过滤掉标签和其他控件。我不知道如何在 foreach 语句中获取控件的值。我猜我需要将控件转换为可以让我获得 .Value 属性的东西,因为通用 Control 不会给我 .Value 属性。

foreach (Control item in Panel_Controls.Controls)
{
    if (!(item is Label | item is LiteralControl))
    {
        //How can I access the .Value of the controls here?
    }
}

有人可以建议一种在 foreach 循环中从 TextBox 和 DropDowns 获取值的好方法吗?

非常感谢。

4

4 回答 4

2

您必须将 item 转换为适当的控件类型才能访问它的属性。

if (!(item is Label | item is LiteralControl))
{
      if(item is TextBox)
      {
        TextBox textBox = (TextBox)item;
        string textValue = textBox.Text;
      }
      ...

}
于 2011-06-23T14:55:47.127 回答
1

或者,您可以使用 Linq 获取一个IEnumerableTextboxes 和一个IEnumerableDropDownLists:

IEnumerable<TextBox> txts = Panel_Controls.Controls.OfType<TextBox>();
IEnumerable<DropDownList> ddls = Panel_Controls.Controls.OfType<DropDownList>();

结果可枚举已经具有正确的类型。这样您就可以单独遍历枚举,因为您对每个项目所做的操作是不同的,具体取决于类型。

最终结果是IF你的循环内部不会有很多内容:你将有两个迭代块:

foreach(TextBox txt in txts)
{
    //your textbox code
}

foreach(DropDownList ddl in ddls)
{
    //your dropdownlist code
}
于 2011-06-23T15:08:19.080 回答
0

不能使用控件的 Text 属性吗?这样你就不必关心它是什么类型的控制。你需要什么类型的值?会串吗?

foreach (Control item in Panel_Controls.Controls)
{
   string value = item.Text;
   // do something with the value
}
于 2011-06-23T15:30:55.077 回答
0

您应该将项目投射到文本框,如:

TextBox textbox = item as TextBox;
if (textbox != null)
    string text = textbox.Text;

您可以对任何其他控件执行相同操作

于 2011-06-23T14:56:14.110 回答