2013-02-28 8 views
6

私はlabelstextboxesを動的に作成しました。すべてうまくいくが、第2のlabelは全く現れたくない。どこが間違っていますか?これはC#の私のコードです:私は間違っていますか?動的にラベルを作成する#

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    OracleDataReader reader; 
    int x = 434; 
    int y = 84; 
    int i = 0; 
    try 
    { 
     conn.Open(); 

     foreach (var itemChecked in checkedListBox1.CheckedItems) 
     { 
      Label NewLabel = new Label(); 
      NewLabel.Location = new Point(x + 100, y); 
      NewLabel.Name = "Label" + i.ToString(); 
      Controls.Add(NewLabel); 
      TextBox tb = new TextBox(); 
      tb.Location = new Point(x, y); 
      tb.Name = "txtBox" + i.ToString(); 
      Controls.Add(tb); 
      y += 30; 
      OracleCommand cmd = new OracleCommand("SELECT distinct data_type from all_arguments where owner='HR' and argument_name='" + itemChecked.ToString() + "'", conn); 


      reader = cmd.ExecuteReader(); 

      while (reader.Read()) 
      { 
       label[0].Text = reader["data_type"].ToString(); 
      } 

      i++; 
     } 
    } 
    finally 
    { 
     if (conn != null) 
      conn.Close(); 
    } 
} 

private void Procedure() 
{ 
    string proc = ""; 
    try 
    { 
     conn.Open(); 

     if (this.listView1.SelectedItems.Count > 0) 
      proc = listView1.SelectedItems[0].Text; 

     OracleCommand cmd = new OracleCommand("" + proc + "", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandTimeout = 600; 

     int i = 0; 
     foreach (var itemChecked1 in checkedListBox1.Items) 
     { 
      Control[] txt = Controls.Find("txtBox" + i.ToString(), false); 
      Control[] label = Controls.Find("Label" + i.ToString(), false); 
      cmd.Parameters.Add(new OracleParameter("select distinct data_type from all_arguments where owner='HR' and argument_name=toupper("+itemChecked1.ToString()+")",conn)); 
      cmd.Parameters[":"+itemChecked1.ToString()+""].Value=label[0].Text; 
      cmd.Parameters.Add(new OracleParameter(":" + itemChecked1.ToString() + "", OracleDbType.Varchar2)); 
      cmd.Parameters[":" + itemChecked1.ToString() + ""].Value = txt[0].Text; 

      i++; 
+1

htmlを表示し、ラベルがあることを確認します。そうであれば、ブラウザの開発ツールを使用してCSSを手動で調整してください。 IE9はツールでうまく組み込まれています、ちょうどF12を押してください。 –

+5

"どこが間違っていますか?" SQLインジェクション以外にも、魔法の変数名は 'int x = 434; int y = 84; '、そしてチェックされた項目ごとにselect文を実行しているという事実?そしてなぜそれを回して見つけてくれるのですか?むしろ、私はあなたがしようとしていることを説明するべきだと思います。そして、このコードを捨ててやり直すことができます。 – aquinas

+2

ここに投稿した人が私はそれをやりましたが、投稿を削除した理由はわかりません。私は、これらの2つの行に何か他の単語ラベルを置き換えます:Control [] label = Controls.Find( "Label" + i.ToString()、false); NewLabel.Name = "ラベル" + i.ToString(); – Viva

答えて

1

私は2番目のラベルが登場したと思います。しかし、そのテキストは空の文字列です!だからあなたは決してそれを見ないでしょう。 DBリーダーが返す "data_type"を確認してください。

関連する問題