2014-10-03 3 views
0

Я добавил динамически текстовые поля в FlowLayoutPanel из таблицы SQL, как этотКак читать данные из динамически добавленных текстовых полей в FlowLayoutPanel?

string query = "SELECT* FROM tblA"; 

using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DummyData;Integrated Security=True")) 
{ 
    conn.Open(); 

    using (SqlCommand cmd = new SqlCommand(query, conn)) 
    { 
     SqlDataReader reader = cmd.ExecuteReader(); 

     while (reader.Read()) 
     { 
      Label objLbl = new Label(); 
      TextBox objText = new TextBox(); 
      objLbl.Text = reader["A_Name"].ToString(); 
      objText.Name = "txt"+reader["ID"].ToString(); 
      pnlFlow.Controls.Add(objLbl); 
      pnlFlow.Controls.Add(objText); 
     } 
    } 
} 

Это работает отлично. Теперь проблема, с которой я сталкиваюсь, - это когда пользователь вводит некоторые данные в эти текстовые поля. Как получить эти данные для дальнейшей обработки?

ответ

1

Существует несколько способов сделать это, в зависимости от того, как и когда вам нужно получить значения.

Если вам нужно прочитать их все сразу, что-то вроде:

foreach(Control c in pnlFlow.Controls) 
{ 
     if c.Name.StartsWith("txt") 
     // process the text box 
     // you might want to use a more distinct naming pattern to be safe 
     ... 
} 

Если вам нужно обработать их по отдельности и в разное время, вы можете ссылаться на них по имени в коллекции Controls:

string textBoxName = "txt12345"; 
string valueText = ((TextBox)pnlFlow.Controls[textBoxName]).Text; 

Конечно, обе эти фрагменты нуждаются в улучшенной обработке ошибок, но я оставлю это вам.