2013-10-14 82 views
0

創建的控制,我想一些幫助了以下問題:如何獲得的值在運行時

我有一個MySQL/WinForms應用程序是abbout客戶和他們的請求。在某個時候,我想創建一個Tabcontrole。此Tabcontrole的選項卡是在運行時創建的。選項卡的數量取決於客戶端的請求數量。在選項卡上,還會在運行時創建許多控件(文本框,按鈕等)。

現在我開始陷入困境。如何訪問選項卡上的控件以將其值存儲在數據庫中?

這是我使用創建的控件的代碼:

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); 
     } 

    } 

在我involke的方法讀取器 「NieweTab(tabControl1,onderwerp);」 這是代碼:

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.Controls並按名稱搜索。 –

+0

感謝您的回覆,但我不明白該怎麼辦?你能否給我多些提示? –

回答

1

您需要將每個控件都放在列表中,以便以後可以訪問它們。

首先創建一個用戶控件,其中包含所有需要從數據庫填充並稍後訪問的控件。 爲這些控制值創建Getters和setter。 你必須能夠在一定程度上使用控制這樣

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將控件添加到選項卡。

當你想從UI數據發佈他們DB簡單的foreach每一個用戶控件,並從獲得的數據也

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

你的問題究竟是什麼?如何從usercontrol獲取數據或如何插入數據在數據庫中? –

+0

我想從用戶控件中獲取數據並將它們插入到數據庫中。我認爲您的設置是錯誤的,因爲標籤的數量(名稱)是從數據庫中檢索的。我剛剛嘗試了一個「foreach循環」,將controls.text放在列表<>中,但似乎只有最後一個選項卡的控件纔會添加到列表中。 –

相關問題