1

ControlPanelにいくつかのコントロールを動的に入力しています...一部はドロップダウン、一部はテキストボックスです。

//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ボックスフィールドの値を取得する必要があります。ラベルやその他のコントロールを除外できます。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から値を取得する良い方法を提案できますか?

本当にありがとう。

4

4 に答える 4

2

プロパティにアクセスするには、アイテムを適切なコントロールタイプにキャストする必要があります。

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を使用してIEnumerable、テキストボックスとIEnumerableドロップダウンリストを取得することもできます。

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

結果の列挙可能オブジェクトには、すでに正しいタイプがあります。そうすれば、各アイテムで行うことはタイプによって異なるため、列挙型を個別に繰り返すことができます。

最終的な結果として、ループ内に多くの部分がなくなりIFます。2つの反復ブロックがあります。

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

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

次のようにアイテムをテキストボックスにキャストする必要があります。

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

他のコントロールについても同じことができます

于 2011-06-23T14:56:14.110 に答える
0

コントロールのTextプロパティを使用できませんか?そうすれば、それがどのタイプのコントロールであるかを気にする必要がなくなります。値はどのタイプにする必要がありますか?文字列はできますか?

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