2016-08-26 1 views
0

TextBoxとNumericUpDownツールがforeachループによって動的に生成されるコードがあります。今、私は両方の値を得ることができるようにしたい、各反復で、両方の値は、データベースの同じ行に追加されます。 NumericUpDown値を取得するためのコードがあり、TextBox値を取得する方法を実装する方法が不思議でした。C#ウィンドウのフォームでダイナミックなnumericupdownとtextboxの値を取得する方法

ボタンのクリックに動的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()); 
     } 

サンプル出力

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をし、テキストボックスを生成するために、各行が挿入されるコードデータベース enter image description here

どのようにして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; 
    ......... 
} 

あなたがTextBoxsを削除する場合& NumericUpDowns - そして、あなたにも辞書をクリアする必要があります - :次のようにマッチングペアテキストボックスを保存するためのTextBox辞書 -

+0

DBにさらに挿入される変数 'number'に両方の値を追加しますか? –

+0

@Rakitićhmmm私はそれが別の変数に格納されていることを好むでしょう。 –

+0

辞書のようなものを使って試してみましょう:http://stackoverflow.com/questions/12238599/find-wpf-control-by-name - あなたは2つを使うことができます各コントロールの同じキーを持つ辞書 – PaulF

答えて

0

はたぶん、あなたは文字列を使用することができますそれ以外の場合は、それらへの参照を保持します&ガベージコレクタによってクリーンアップされません。

関連する問題