我用一些控件动态填充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和Text框字段的值。我可以过滤掉Label和其他控件。我无法弄清楚如何在foreach语句中获取控件的值。我猜我需要将控件转换成能让我获得.Value属性的东西,因为泛型控件不会给我一个.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获取值的好方法吗?
非常感谢。
答案 0 :(得分:2)
您必须将项目转换为适当的控件类型才能访问它的属性。
if (!(item is Label | item is LiteralControl))
{
if(item is TextBox)
{
TextBox textBox = (TextBox)item;
string textValue = textBox.Text;
}
...
}
答案 1 :(得分:1)
或者,您可以使用Linq获取IEnumerable
个文本框和IEnumerable
DropDownLists:
IEnumerable<TextBox> txts = Panel_Controls.Controls.OfType<TextBox>();
IEnumerable<DropDownList> ddls = Panel_Controls.Controls.OfType<DropDownList>();
结果枚举已经具有正确的类型。这样你就可以单独遍历枚举,因为你对每个项目的处理方式不同,具体取决于类型。
最终结果是你在循环中没有IF
的buch:你将有两个迭代块:
foreach(TextBox txt in txts)
{
//your textbox code
}
foreach(DropDownList ddl in ddls)
{
//your dropdownlist code
}
答案 2 :(得分:0)
您应该将项目转换为文本框,如:
TextBox textbox = item as TextBox;
if (textbox != null)
string text = textbox.Text;
您可以对任何其他控件执行相同操作
答案 3 :(得分:0)
你不能使用控件的Text属性吗?这样你就不必关心它是什么类型的控制。你需要什么类型的价值?字符串会吗?
foreach (Control item in Panel_Controls.Controls)
{
string value = item.Text;
// do something with the value
}