Привязка нескольких элементов управления текстовым полем к строкам базы данных - PullRequest
1 голос
/ 04 октября 2010

Я пытаюсь сохранить некоторые параметры для своего приложения в таблице базы данных. Таблица содержит несколько строк, которые содержат отношения Key -> Value. В моей программе Windows Forms (написанной на C #) у меня есть несколько элементов управления, которые должны позволять пользователю взаимодействовать с сохраненной конфигурацией в базе данных.

Например, моя таблица базы данных выглядит следующим образом:

id option_name               option_value
1  serial_port_baudrate      9600
2  serial_port_stopbits      one

В моей форме есть элементы управления, которые позволяют изменять эти значения. После некоторых исследований я получил ожидаемые результаты, используя класс bindingSource и свойство filter. Но я должен создать объект bindingSource для каждого текстового поля, используя визуальный редактор. Можете ли вы помочь мне архивировать это с несколькими текстовыми полями и элементами управления без использования визуального редактора?

Я не знаю, возможно ли это, но я хотел бы написать решение, в котором я мог бы просто назвать текстовые поля в моей форме с тем же именем ключа, которое содержит значение в базе данных, и тогда они получат правильное значения при запуске приложения. Буду признателен за любую информацию или советы, которые вы можете предоставить.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2013

Это то, что я использую для своей таблицы параметров:

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

Я не уверен, что это лучшее решение, но оно работает.Я всегда ищу лучший способ, если у кого-то есть такой.

0 голосов
/ 09 октября 2010

Ну, вы можете назвать все текстовые поля так же, как поля базы данных, а затем просмотреть все элементы управления текстовыми полями в форме. Используйте имя формы в качестве параметра, как показано ниже:

 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();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...