2013-02-28 9 views
6

Utworzono dynamicznie labels i textboxes. wszystko idzie dobrze, ale drugie label nie chce się w ogóle pojawić. gdzie się mylę? to jest mój kod w języku C#:gdzie się mylę? dynamiczne tworzenie etykiet 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

Wyświetl HTML i sprawdź, czy jest tam etykieta. Jeśli tak, użyj narzędzi programistycznych przeglądarki, aby ręcznie dostosować css. IE9 ma przyzwoite wbudowane narzędzia, po prostu naciśnij klawisz F12. –

+5

"gdzie się mylę?" Oprócz iniekcji SQL, magiczne nazwy zmiennych: 'int x = 434; int y = 84; 'oraz fakt, że używasz instrukcji select dla * każdego * zaznaczonego elementu? I dlaczego tworzysz etykietę tylko po to, aby ją zawrócić i ZNALEŹĆ? Mówiąc szczerze, myślę, że powinieneś opisać, co próbujesz zrobić, i w ten sposób możemy wyrzucić ten kod i zacząć od nowa. – aquinas

+2

Udało mi się to zrobić, przez kogoś, kto tutaj pisał, ale nie wiem, dlaczego usunął post. Zamieniam etykietę słowa na coś innego w tych 2 liniach: Control [] label = Controls.Find ("Label" + i.ToString(), false); oraz NewLabel.Name = "Label" + i.ToString(); – Viva

Odpowiedz

1

Wydaje mi się, że pojawiła się druga etykieta. Ale jego tekst jest pustym ciągiem! Więc nigdy tego nie zobaczysz. Sprawdź "typ_danych" zwrócone przez czytnik DB.

Powiązane problemy