2010-05-11 3 views
1

Каков предпочтительный метод обновления комбинированного поля при изменении данных?Каков предпочтительный метод обновления поля со списком при изменении данных?

Если форма открыта, и данные со списком уже загружены, как вы обновляете содержимое поля со списком без необходимости закрытия формы и ее перезагрузки?

Вам нужно что-то сделать в событии Click в поле со списком? Это может показаться потенциальным замедлением для приложения, если есть хиты в базе данных каждый раз, когда кто-то нажимает на поле со списком.

+0

VB6, VB.Net, прочее? –

+0

VB6, хотя обычно задаю вопрос. – CJ7

+0

@ Craig Johnston, Как я вижу, мой ответ не был полезен? – hgulyan

ответ

1

Вы должны определить:

1) Когда вы изменить данные?

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

2) Когда ваш пользователь должен знать об этом изменении?

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

Наконец:

Существует не правильный способ сделать это. Это зависит от структуры программного обеспечения, потребностей пользователей и конкретной ситуации.

Надеюсь, это поможет. Удачи!

UPDATE:

Я могу добавить решения, которые я использовал в последнее время. Если что-то не будет ясно, просто спросите.

Я предполагаю, что вы обновляете комбо от MS SQL Server.

Если да, то

1. Создайте таблицу, хранения в нем данных Combo дату или версию изменения.

2. onClick event или с помощью таймера, который будет проверять изменения каждые 5 минут (или в любое другое время), вы можете сравнить последнюю дату изменения (или версию) вашей комбинации с последним изменением (или версией) в этой таблице мы сохраняем последнюю дату (или версию), и только если дата (или версия) была изменена, обновите комбо.

3. Последняя дата (или версия), которую вы можете сохранить в переменной или в элементе управления текстовым полем, изменяя его значение каждый раз, когда вы обновляете комбо.

4. Обновите последнюю дату (или версию) в этой таблице, если данные будут изменены.

В этом случае вам просто нужно проверить изменения, а не обновлять их.

P.S. Если это решение не подходит вам, просто обновляйте каждый раз при щелчке. В этом случае нет лучшего события.

0

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

+0

Это выигрышная форма, я думаю. – hgulyan

0

Ясно, что вы используете Dropdown означает, что больше не нужно загружать в dropdowm, я думаю, около 20 или 30. Затем, в чем проблема с вызовом базы данных? создайте процедуру, которая будет использовать план выполнения и даст быстрый результат. или поместите таблицу, которую необходимо загрузить в кеш, и заполните кеш в определенное время , если данные будут изменены, а затем загрузите данные в раскрывающемся списке. Я работаю в приложении Window, я сталкиваюсь с тем же, но нет лучшего варианта , тогда позвоните в базу данных или поместите его в кеш.

0

Я вижу два способа сделать это:

  1. Поставьте кнопку «Обновить» в пользовательском интерфейсе и перезагружать данные только тогда, когда пользователь нажимает на кнопку. Пользователю должно быть понятно (описательная метка, поле сообщения или что-то еще), что, нажав обновление, может измениться его текущий выбор.

  2. Отслеживать изменения данных в базе данных для базовой таблицы комбо. Когда данные изменяются, пользовательский интерфейс может либо сразу обновляться, либо просто хранить флаг об изменениях данных (подробнее об этом позже). Чтобы быстро узнать, когда данные меняются, триггер базы данных кажется лучшим решением для меня: триггер (UPDATE, INSERT, DELETE) задается в базовой таблице комбо и увеличивает счетчик (дата, время, версия, независимо от того, что плавает ваша лодка) в отдельная таблица создана только для этой цели. Каждый раз, когда комбо повторно заполняется (включая загрузку формы), значение счетчика привязывается (тег?) К нему, чтобы сравниваться с текущим значением базы данных. Получение текущего значения счетчика можно выполнить по таймеру.

Теперь, если два счетчика разные есть два варианта:

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

B. Установите флаг, который должен обновить пользовательский интерфейс. В раскрывающемся списке отметьте флаг: если он установлен, начните с повторного заполнения комбо.

В большинстве ситуаций я бы пошел без какого-либо обновления вообще или с помощью первого решения, но это действительно зависит от требований.

HTH.

EDIT:

Цель запуска/установки счетчика не только получить изменить информацию быстро, но на самом деле знать если данные изменились, что было бы гораздо сложнее осуществить непосредственно запрашивая базовую таблицу , Извините, если это было не ясно в моем первоначальном сообщении (или даже после этого добавления), но английский не является моим родным языком.

0

Вопрос 1: ComboboxName.Clear, а затем ComboboxName.Items.AddItem для каждого элемента. Вопрос 2: Конечно, это зависит от того, как часто данные меняются и насколько велик список, но я бы, вероятно, поставил таймер на каждую минуту или около того. Это предотвратит слишком много обращений к БД и убедитесь, что ваша форма не занимает слишком много времени, заполняя значения в поле со списком.

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