2011-02-09 2 views
0

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

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

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 

Теперь я создал функцию, чтобы захватить ID и категорию, чтобы выбрать конкретное имя с помощью 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(), а х для всех значений, которые не имеют каких-либо значений ..

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

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

+2

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

+1

Кстати, нет такой вещи, как «C# .Net». Это просто «C#». –

ответ

4

Существует много грязного код там так сделать эти вещи:

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

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

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

0

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

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

Смежные вопросы