2016-04-07 15 views
1

ile bulamıyorum Aynı sayfada bir metin kutusu denetimi bulmaya çalışırken karşılaştım. Hata ayıkladığımda bana bir null veriyor.Metin kutusunu 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(); 
    } 

Sorun çözüldü:

İşte benim kodudur Ben metin kutusu denetimi bir kap (. Örn İçerikyertutucusu1) olduğunu belirtmedi. aynen bu şekilde gönderen nesne olarak metin kutusu göndermesi gerektiğini

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

yerine bulmak kontrolünü denemek bulmak zordur, Çalışma denemek olmalıdır. Lütfen, Page.FindControl & this.Page.FindControl'ü deneyin ve size yardımcı olup olmadığınızı bildirin ( –

+0

). Metin kutusu nerede tanımlanır? gridview gibi başka bir konteynır kontrolünde mi? – Adil

+0

Bunu yaptım ama işe yaramadı. Niçin niçin geri dönmeyi sürdürdüğünü anladım ve sebebin, kontrolün bir konteynırda olduğunu belirtmediğim için. Örneğin, ContentPlaceHolder1 –

cevap

1

: Burada

düzeltilmiş kodudur değiştirmek gerekir elbette

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

senin TextBox nesnesini kabul etmeyecek yöntem.

ve bu yalnızca birden fazla metin kutusu için aynı olay işleyicisini kullandığınızda anlamlıdır.

1

o

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

O ID.so tarafından kontrol Bu kodu

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(); 
     } 

ve

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

Harika! Bu yolu daha çok seviyorum. Bunu benimle paylaştığınız için teşekkür ederiz. –

+0

welcome @RonT. –

İlgili konular