2013-10-14 2 views
0

에서 만든 컨트롤에서 값을 얻는 방법 : 나는 고객과 그들의 요구 abbout 인 MySQL은/​​윈폼 응용 프로그램을 가지고나는 다음과 같은 문제에 도움 싶습니다 런타임

합니다. 어떤 시점에서 저는 Tabcontrole을 만들고 싶습니다. 이 tabcontrole의 탭은 런타임에 작성됩니다. 탭 수는 클라이언트의 요청 수에 따라 다릅니다. 탭에서 런타임에 여러 컨트롤 (텍스트 상자, 단추, e.a.)이 만들어집니다.

이제 막 달라 붙었습니다. 탭의 컨트롤에 액세스하여 값을 데이터베이스에 저장하려면 어떻게합니까? "NieweTab (tabControl1, onderwerp)"I이 방법 involke 리더에

private void GetAllrequestsForSameClient(string client) 
    { 
     MySqlConnection MijnConnectie = new MySqlConnection(Constanten.DATABASECONNSTRING); 
     string query = "select * from gedeeldeNotepadDB.requests WHERE requestsForeClient = '" + client + "';"; 
     MySqlCommand mysqlcommand = new MySqlCommand(query, MijnConnectie); 
     MySqlDataReader myReader; 

     try 
     { 
      MijnConnectie.Open(); 
      myReader = mysqlcommand.ExecuteReader(); 
      while (myReader.Read()) 
      { 
       string onderwerp = myReader.GetString("onderwerpBijstandAanvraag"); 
       NieweTab(tabControl1, onderwerp); 

      } 
      MijnConnectie.Close(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

:

이 제가

컨트롤을 만들 때 사용하는 코드 나는 문제가 무엇인지 명확하게 한 희망

public void NieweTab(TabControl tabControl1, string onderwerp) 
    { 
     TabPage tabPage1 = new System.Windows.Forms.TabPage(); 
     Label lblvan = new System.Windows.Forms.Label(); 
     Label lblPeriode = new System.Windows.Forms.Label(); 
     Label lblTot = new System.Windows.Forms.Label(); 
     MaskedTextBox txtPeriodeTot = new System.Windows.Forms.MaskedTextBox(); 
     MaskedTextBox txtPeriodeVan = new System.Windows.Forms.MaskedTextBox(); 
     Label lblDraagkracht = new System.Windows.Forms.Label(); 
     TextBox textBox1 = new System.Windows.Forms.TextBox(); 
     Button btnTabIsKlaar = new System.Windows.Forms.Button(); 
     btnTabIsKlaar.Click += new System.EventHandler(MyButtonHandler); 



     tabControl1.Controls.Add(tabPage1); 
     tabControl1.Location = new System.Drawing.Point(12, 111); 
     tabControl1.Name = "tabControl1"; 
     tabControl1.SelectedIndex = 0; 
     tabControl1.Size = new System.Drawing.Size(533, 209); 
     tabControl1.TabIndex = 38; 
     //followed by a lot of layout code..... 

: 이 코드인가? 미리 문제를 해결해 주셔서 감사합니다.

+0

Tab의 모든 컨트롤과 함께 사용자 정의 컨트롤을 만들고 로컬 목록 (목록 )을 사용하여 액세스하십시오. 당신이 어려운 길을 원한다면 ... foreach this를 사용하십시오. 이름으로 제어 및 검색하십시오. –

+0

답장을 보내 주셔서 감사합니다.하지만 어떻게 해야할지 이해할 수 없습니까? 좀 더 힌트를 주시겠습니까? –

답변

1

모든 컨트롤을 목록에 담아 나중에 액세스 할 수 있도록해야합니다.

먼저 DB에서 채워지고 나중에 액세스해야하는 모든 컨트롤이있는 usercontrol을 만듭니다. 이 제어 값에 대한 게터 및 설정자를 만듭니다. 당신은 나중에 참조 클래스에 추가 된 UserControls를 개최 목록을 만들려면이

ucDBControl uc1 = new ucDBControl() 
uc1.PeriodeTot = myReader.GetString("PeriodeTot"); 
uc1.Onderwerp = myReader.GetString("onderwerpBijstandAanvraag"); 

MySQLParameter onderwerpParam = new MySQLParameter("onderwerp", uc1.Onderwerp, NVarChar,20); 
MySQLParameter PeriodeTotParam = new MySQLParameter("PeriodeTot", uc1.PeriodeTot, NVarChar,20); 

다음 단계와 같이 어느 정도 제어 할 수있다 사용할 수 있어야합니다

List<ucDBControl> myListControl = new List<ucDBControl> 

나중에 while (myReader.Read())에 UserControl을 만들고 해당 컨트롤을 목록에 추가 한 후 함수에 전달하여 newTab에 배치하십시오

MijnConnectie.Open(); 
    myReader = mysqlcommand.ExecuteReader(); 
    while (myReader.Read()) 
    { 
     var ucTemp = new ucDBControl(); 

     //create and initialize the usercontrol 
     string onderwerp = myReader.GetString("onderwerpBijstandAanvraag"); 
     string PeriodeTot = myReader.GetString("PeriodeTot"); 
     ucTemp.Onderwerp = onderwerp; 
     ucTemp.PeriodeTot = PeriodeTot ; 

     //hold it in the list 
     myListControl.Add(ucTemp); 

     //and add it in the interface 
     NieweTab(tabControl1, ucTemp); 

    } 

그런 다음 NieweTab을 구현하여 탭에 컨트롤을 추가해야합니다. 당신이 간단한 foreach는 매 UserControl을을 dB로 그들을 게시 할 UI에서 데이터를 얻을에서 데이터를 얻으려면

그것을

foreach(var uc in myListControl){ 
    //uc.Onderwerp must get the data from the text box 
    //and use it in a MySQLParameter. 
    MySQLParameter onderwerpParam = new MySQLParameter("onderwerp", uc1.Onderwerp, NVarChar,20); 
MySQLParameter PeriodeTotParam = new MySQLParameter("PeriodeTot", uc1.PeriodeTot, NVarChar,20); 
// Exec sql using the parameters out of the usercontrol 

} 당신이 바람직 (목록에 컨트롤을 유지해야

+0

답장을 보내 주셔서 감사합니다. 이것은 내가 길 아래로 더 필요한 것입니다. (-; 먼저 tabcontrolTabs에서 데이터베이스에 데이터를 넣어야합니다.) –

+0

정확히 무엇입니까? 사용자 정의 컨트롤에서 데이터를 가져 오는 방법 또는 데이터를 삽입하는 방법 DB에서 –

+0

나는 사용자 정의 컨트롤에서 데이터를 가져 와서 데이터베이스에 삽입하고 싶습니다. 탭의 수 (이름)가 데이터베이스에서 검색 되었기 때문에 잘못 설정 한 것 같습니다.나는 "foreach 루프"를 사용하여 controls.text를 목록 <>에 넣으려고 시도했지만 마지막 탭의 컨트롤 만 목록에 추가 된 것처럼 보입니다. –

관련 문제