назначить текстовое значение для кнопок из базы данных в .net? - PullRequest
0 голосов
/ 09 февраля 2011

У меня 30 кнопок без значения текста по умолчанию.То, что я хочу сделать, это получить упорядоченные данные из базы данных:

Вот формат базы данных:

ID       value                   cat
1       Button name               a
2       Another name              a
3       something                 a
.           .                     a
.           .                     a
.           .                     a
30      Last button               a
1       Button name               b
2       Another name              b
3       something                 b
.           .                     b
.           .                     b
.           .                     b
18      Last button               b

Теперь я создал функцию для захвата идентификатора и категории, чтобы выбрать конкретное имяиспользуя OLEDB для базы данных MS ACCESS.

здесь есть функция:

 private string getItem(int i, string a) {
     //database connection
    // database query and table slection where ID = i and cat = a
    read the data in the selected column
    return the string form of the column
 }

Теперь, когда форма загружается, я назначаю следующую функцию:

 button1.Show();
      ...
      ...
  button30.Show();
  button1.Text = getItem(1, a);
  button2.Text = getItem(2, a); 
       ..
       ...
       ...
  button30.text = getItem(30, a);

сноваесть отдельная кнопка для изменения категории, которая изменит текстовое значение в кнопке:

button1.Text = getItem(1, b);
  button2.Text = getItem(2, b);
       .
       .
       .
  button18.Text = getItem(18, b);
  // because I have only 18 items I hide all the remaining buttons.
  button19.Hide();
           ...
  button30.Hide();

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

Есть ли способ сделать это в массиве или что-то в этом роде?Приведенный выше код требует многократного доступа к базе данных, что приводит к медленной обработке.

Другая проблема заключается в том, что если в таблице базы данных есть только 18 или менее 30 элементов, то готовые кнопки будут видны со значениями по умолчанию..

В приведенном выше коде я преодолел это с помощью buttonx.Hide (), в то время как x для всех значений, которые не имеют никаких значений ..

Это все ручная работа и требуетсямассовая кодировка.

Буду признателен за хороший метод преодоления этой проблемы.

Ответы [ 2 ]

4 голосов
/ 09 февраля 2011

Там много грязного кода, поэтому сделайте следующее:

  • Во-первых, не всегда доступны все кнопки (это решит проблему наличия случайных кнопок с текстом по умолчанию).).Вместо этого сгенерируйте и добавьте в форму свой код (Form.Controls.Add()).

  • Вместо того, чтобы совершать многократные обходы.у вас есть DataTable в вашем коде, чтобы хранить кеш таблицы и вместо этого извлекать эту DataTable.(Если данные слишком изменчивы, это может быть бесполезно, но вместо того, чтобы запросить каждый элемент для запроса всей таблицы сразу)

  • Вы можете использовать LINQ для запроса к DataTable, чтобы уменьшить кодразмер.(И сделать его более ремонтопригодным)

0 голосов
/ 09 февраля 2011

Как отметил Джефф М, первое, что вам нужно сделать, это загрузить все записи, используя один запрос.

Затем создайте кнопки, просматривая записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...