2016-04-07 8 views
1

同じページでテキストボックスコントロールを検索しようとすると問題が発生しました。私はそれをデバッグするとき、それは私にnullを与え続けます。FindControlでテキストボックスを見つけることができませんC#

public void UpdateTimeLog(string input) 
    { 
     string timeNumber = "txtTime" + input; 
     TextBox myTextbox = (TextBox)FindControl(timeNumber); 

     sqlConnection.Open(); 
     using (var command = new SqlCommand("UPDATE [JobSheet] SET [Time" + input + "][email protected]" + input + " WHERE [JobShtId][email protected]", sqlConnection)) 
     { 
      command.Parameters.AddWithValue("@JobShtId", jobSheetId); 
      command.Parameters.AddWithValue("@Time" + input + "", myTextbox.Text); 
      command.ExecuteNonQuery(); 
     } 
     sqlConnection.Close(); 
    } 

問題が解決:

は、ここに私のコードです私は、TextBoxコントロールがコンテナ(例えばContentPlaceHolder1)にあったことを指定しませんでした。

public void UpdateTimeLog(string input) 
    { 
     var container = Master.FindControl("ContentPlaceHolder1"); 
     string timeNumber = "txtTime" + input; 
     TextBox myTextbox = (TextBox)container.FindControl(timeNumber); 

     sqlConnection.Open(); 
     using (var command = new SqlCommand("UPDATE [JobSheet] SET [Time" + input + "][email protected]" + input + " WHERE [JobShtId][email protected]", sqlConnection)) 
     { 
      command.Parameters.AddWithValue("@JobShtId", jobSheetId); 
      command.Parameters.AddWithValue("@Time" + input + "", myTextbox.Text); 
      command.ExecuteNonQuery(); 
     } 
     sqlConnection.Close(); 
    } 
+0

を試してみてくださいID.soによる制御を見つけることは困難です。 。Page.FindControlとthis.Page.FindControlを試してみてください。それがあなたに役立つかどうか教えてください –

+0

テキストボックスはどこに定義されていますか?それはgridviewのような他のコンテナコントロールにありますか? – Adil

+0

私はそれをしましたが、うまくいきませんでした。私はnullを返し続けた理由を知りました。なぜなら、コントロールがコンテナ内にあることを指定しなかったからです。たとえば、ContentPlaceHolder1 –

答えて

1

あなたはこのような送信者のオブジェクトとして、あなたのテキストボックスを送信する必要があります:もちろん

UpdateTimeLog("2",(TextBox)sender); 

を、あなたを変更する必要があります。ここ

は修正されたコードですメソッドでもTextBoxオブジェクトを受け入れることができます。

これは、複数のテキストボックスに対して同じイベントハンドラを使用している場合にのみ意味があります。

1

それが仕事は、

TextBox myTextBox = (TextBox)(this.Controls[("txtTime" + input)]).Text); 
1

それを試みるべきであることは、代わりに検索制御のこのコード

public static Control[] FlattenHierachy(Control root) 
     { 
      List<Control> list = new List<Control>(); 
      list.Add(root); 
      if (root.HasControls()) 
      { 
       foreach (Control control in root.Controls) 
       { 
        list.AddRange(FlattenHierachy(control)); 
       } 
      } 
      return list.ToArray(); 
     } 

public void UpdateTimeLog(string input) 
     { 
      string timeNumber = "txtTime" + input; 
      // TextBox myTextbox = (TextBox)FindControl(timeNumber); 
      Control[] allControls = FlattenHierachy(Page); 
      foreach (Control control in allControls) 
      { 
       TextBox textBox = control as TextBox; 
       if (textBox != null && textBox.ID == timeNumber) 
       { 
        textBox.Text = "Hello";//Do your other stuff 
       } 
      } 

      //Rest is ommited 
     } 
+0

恐ろしい!私はこの方法がより好きです。これを私と共有していただきありがとうございます –

+0

ようこそ@RonT。 –

関連する問題