2016-08-26 18 views
0

У меня есть код, в котором инструменты TextBox и NumericUpDown генерируются динамически через цикл foreach. Теперь я хочу иметь возможность получить оба значения, в которых с каждой итерацией оба значения будут добавлены в одну строку в базе данных. У меня есть код для получения значений NumericUpDown, и мне было интересно, как я могу реализовать также получение значений TextBox.Как получить динамическое числовое значение и значения текстового поля в формах окон C#

код для генерации динамического NumericUpDown и TextBox

t = temp.Split(';'); // e.g. t = Arial;32 

int pointX = 70; 
int pointY = 80; 

int pointA = 300; 
int pointB = 80; 

for (int i = 0; i < N; i++) 
{ 

    foreach (object o in t) 
    { 
     TextBox a = new TextBox(); 
     a.Text = o.ToString(); 
     a.Location = new Point(pointX, pointY); 
     a.Size = new System.Drawing.Size(150, 25); 

     panel.Controls.Add(a); 
     panel.Show(); 
     pointY += 30; 

     NumericUpDown note = new NumericUpDown(); 
     note.Name = "Note" + i.ToString(); 
     note.Location = new Point(pointA, pointB); 
     note.Size = new System.Drawing.Size(40, 25); 
     note.Maximum = new decimal(new int[] { 10, 0, 0, 0 }); 
     panel.Controls.Add(note); 
     pointB += 30; 
    } 
} 

Код для получения динамических значений NumericUpDown на кнопку мыши (код базы данных работает)

foreach (NumericUpDown ctlNumeric in panel.Controls.OfType<NumericUpDown>()) 
     { 
      var value = ctlNumeric.Value; 
      int number = Decimal.ToInt32(value); 
      sample_save = "INSERT INTO forthesis (testVal) VALUES ('" + number + "');"; 
      MySqlConnection myConn = new MySqlConnection(connectionString); 
      MySqlCommand myCommand = new MySqlCommand(sample_save, myConn); 
      MySqlDataAdapter da = new MySqlDataAdapter(myCommand); 
      MySqlDataReader myReader; 
      myConn.Open(); 
      myReader = myCommand.ExecuteReader(); 
      myConn.Close(); 
      MessageBox.Show(number.ToString()); 
     } 

Пример вывода, каждая строка будет вставлена ​​в база данных enter image description here

Как я могу получить значения в TextBox (es) тоже? Ваша помощь будет высоко оценена. Огромное спасибо!!!

+0

Вы хотите добавить оба значения в переменную 'number', которая будет добавлена ​​в БД? –

+0

@ Rakitić hmmm, я бы предпочел, чтобы он хранился в другой переменной. –

+0

Пытаясь использовать что-то вроде словаря: http://stackoverflow.com/questions/12238599/find-wpf-control-by-name - вы могли бы использовать два словари с одним и тем же ключом для каждого элемента управления – PaulF

ответ

0

Может быть, вы могли бы использовать строку - словарь TextBox, чтобы сохранить соответствующий паре текстовое поле, как это:

Dictionary<string, TextBox> textboxes = new Dictionary<string, TextBox>(); 
for (int i = 0; i < N; i++) 
{ 
    foreach (object o in t) 
    { 
     TextBox a = new TextBox(); 
     ..... 

     NumericUpDown note = new NumericUpDown(); 
     note.Name = "Note" + i.ToString(); 
     ...... 

     textboxes.Add(note.Name, a); 
    } 
} 

foreach (NumericUpDown ctlNumeric in panel.Controls.OfType<NumericUpDown>()) 
{ 
    var value = ctlNumeric.Value; 
    int number = Decimal.ToInt32(value); 

    TextBox tb = textboxes[ctrlNumeric.Name]; 
    String text = tb.Text; 
    ......... 
} 

Если вы удаляете полей ввода & NumericUpDowns - то вам нужно будет очистить словарь, а также - в противном случае он сохранит ссылки на них &, они не будут очищены сборщиком мусора.

 Смежные вопросы

  • Нет связанных вопросов^_^