2010-10-04 80 views
1

我試圖在數據庫表中存儲我的應用程序的一些參數。該表包含多行,其中包含Key - > Value關係。在我的Windows窗體程序(用C#編寫)中,我有多個控件應該允許用戶與數據庫上存儲的配置進行交互。將多個文本框控件綁定到數據庫行

例如,我的數據庫表如下所示:

id option_name    option_value 
1 serial_port_baudrate  9600 
2 serial_port_stopbits  one 

在我的形式,我有一個允許改變這些值控制。在research之後,我使用bindingSource類和filter屬性獲得了預期結果。但我必須使用可視化編輯器爲每個文本框創建一個bindingSource對象。你能幫我用多個文本框和控件來實現這個功能,而不使用可視化編輯器嗎?

我不知道這是否可能,但我想編寫一個解決方案,我可以在窗體上用保存數據庫值的Key的相同名稱命名文本框,然後他們會得到運行應用程序時的正確值。我將不勝感激您提供的任何信息或提示。

在此先感謝。

+0

這是asp.net嗎? – egrunin 2010-10-04 20:34:35

+0

對不起,我忘了指定。我正在使用C#Visual Studio 2005和SQL 2005處理Windows應用程序。 – Ruben 2010-10-04 21:40:47

回答

0

好吧,您可以將所有文本框命名爲與數據庫字段相同,然後遍歷表單上的所有文本框控件。使用形式的名作爲參數,如下面的代碼:

DataTable table = new DataTable(); 

      //Populate datatable 
    TextBox txt = new TextBox(); 
      foreach(DataRow row in table.Rows) 
     { 
      String controlID = row["option_name"].ToString(); 


       txt.ID = controlID; 

       (new TextBox()).ID = controlID; 

       txt.Text = table.Rows[table.Rows.IndexOf(row)][controlID].ToString(); 
     } 
0

這是我用我的選項表:

void loadOptions(Control parent) 
    { 
     foreach (Control c in parent.Controls) 
     { 
      DataRow[] res = options.Select("option='" + c.Name + "'"); 
      if (c is GroupBox) 
      { 
       loadOptions(c); 
       continue; 
      } 
      if (res.Length < 1) continue; 
      DataRow row = (DataRow)res.GetValue(0); 
      String value = row["value"].ToString(); 
      if (c is TextBox) 
      { 
       c.Text = value; 
      } 
      else if (c is CheckBox) 
      { 
       ((CheckBox)c).Checked = Convert.ToBoolean(value); 
      } 
      else if (c is NumericUpDown) 
      { 
       ((NumericUpDown)c).Value = int.Parse(value); 
      } 
     } 
    } 

我不知道這是否是最好的解決辦法,但它的工作原理。如果有人有,我一直在尋找更好的方法。

相關問題