2010-10-04 8 views
1

Je tente de stocker certains paramètres pour mon application sur une table de base de données. La table contient plusieurs lignes qui contiennent une relation Key -> Value. Sur mon programme de formulaires Windows (écrit en C#) j'ai plusieurs contrôles qui devraient permettre à l'utilisateur d'interagir avec la configuration stockée sur la base de données.Liaison de plusieurs contrôles de zone de texte aux lignes de base de données

Par exemple, ma table de base de données se présente comme suit:

id option_name    option_value 
1 serial_port_baudrate  9600 
2 serial_port_stopbits  one 

Sur ma forme j'ai des contrôles qui permettent de changer ces valeurs. Après certains research j'ai obtenu les résultats attendus en utilisant la classe bindingSource et la propriété filter. Mais je dois créer un objet bindingSource pour chaque zone de texte en utilisant l'éditeur visuel. Pouvez-vous s'il vous plaît m'aider à archiver cela avec plusieurs zones de texte et contrôles sans utiliser l'éditeur visuel? Je ne sais pas si c'est possible, mais je voudrais coder une solution où je pourrais simplement nommer les zones de texte sur mon formulaire avec le même nom de la clé qui détient la valeur dans la base de données, puis ils obtiendraient la Corrigez les valeurs lorsque l'application s'exécute. J'apprécierais toute information ou suggestion que vous pourriez fournir.

Merci d'avance.

+0

Est-ce asp.net? – egrunin

+0

Je suis désolé, j'ai oublié de préciser. Je travaille sur une application Windows en utilisant C# Visual Studio 2005 et SQL 2005. – Ruben

Répondre

0

Eh bien, vous pouvez nommer toutes les zones de texte de la même manière que les champs de base de données, puis faire défiler tous les contrôles de la zone de texte sur le formulaire. Utilisez le nom du formulaire en tant que paramètre comme dans le code ci-dessous:

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

C'est ce que je l'utilise pour ma table Options:

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

Je ne suis pas sûr que ce soit la meilleure solution mais ça marche. Je cherche toujours un meilleur moyen si quelqu'un en a un.