1

私はC#でプロジェクトに取り組んでいます。250を超えるテキストフィールドにテキストを挿入する必要があります。データを文字列の配列に格納しました。次に、配列からこれらの250のテキストボックスにデータを順番に挿入する必要があります。

textbox1.Text=StringArray[1];
textbox2.Text=StringArray[2];
       .               .
       .               .
       .               .
textbox250.Text=StringArray[250];

私はそれをグーグルで検索しましたが、肯定的な結果はありませんでした。すべてのテキストボックスからテキストをクリアするコードを作成しました。

Action<Control.ControlCollection> func = null;
func = (controls) =>
{
    foreach (Control control in controls)
       if (control is TextBox)
          (control as TextBox).Clear();
       else
          func(control.Controls);
 };
 func(Controls);

このようなテキストを挿入しようとしました

 Action<Control.ControlCollection> func = null;
 int i=0;
 func = (controls) =>
 {
     foreach (Control control in controls)
     {
         if (control is TextBox)
            (control as TextBox).Text = result_set[i++].ToString();
         else
            func(control.Controls);

     }
 };

 func(Controls);

しかし、タイプ'System.IndexOutOfRangeException'の例外が発生しました。

4

2 に答える 2

1

エラーは、配列外のメンバーにアクセスしたためです。ループによって見つかったページに他のテキストボックスがあり、配列インデックスが範囲外になっている可能性があります。多分あなたはこのようなことをすることができます:

 for(int i = 1; i <= StringArray.Length; i++)
 {
     // I don't know which technology you use, it might be a different method to find
     Control control = controlCollection.FindByName("Textbox" + i.ToString(); 
     if (control is TextBox)
        (control as TextBox).Text = StringArray[i];
 }
于 2012-12-10T16:56:04.617 に答える
0

配列のインデックスを使用して、ページ上のすべてのテキストボックスに属性「インデックス」を追加し、テキストを挿入するためにイベント「OnInit」に関数を添付できます。例:

ページ:

[asp:TextBox ID="TextBox1" runat="server" OnInit="setText" index="1"][/asp:TextBox]

[asp:TextBox ID="TextBox2" runat="server" OnInit="setText" index="2"][/asp:TextBox]

...

コードビハインド:

public void setText(オブジェクト送信者, System.EventArgs e) {

    TextBox tbx;
    tbx = sender;
    tbx.Text = StringArray[sender.attributes["index"]];

}

お役に立てれば!

于 2012-12-10T17:21:33.940 に答える