2013-10-14 51 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放在列表<>中,但似乎只有最后一个选项卡的控件才会添加到列表中。 –

相关问题