2011-01-13 4 views
0

У меня есть форма, я извлекаю много записей из базы данных, которые динамически преобразуются. Когда я нажимаю кнопку «Удалить», это также удаляется, но я хочу повторно отобразить свою форму, чтобы пользователь почувствовал, что записи удалены полностью. когда я пишу код this.refresh(); это не выбор значений из базы данных, и я не вижу, что запись полностью исчезла. Это форма Windows C#.Перезагрузка формы в C# .net

+0

winforms или wpf? – dandan78

+0

Какая форма: Webform, Winform или другое? Здесь есть разные формы, и это важный момент для того, чтобы кто-нибудь действительно помог вам, если вам не нужны ответы на все случаи, которые я бы сомневался. –

+0

жаль упоминать .... Это Winform –

ответ

2

Методы Form.Refresh и Form.Invalidate не имеют ничего общего с тем, что приложение извлекает новые данные из базы данных.

  • Form.Refresh - перерисовывает форму синхронно (т.е. Form.OnPaintBackground и Form.OnPaint называются непосредственно на текущем потоке).

  • Form.Invalidate - перерисовывает форму асинхронно (т.е. WM_PAINT сообщение посылается в окно, так что Form.OnPaintBackground и Form.OnPaint будет вызываться в потоке пользовательского интерфейса, когда он обрабатывает сообщения).

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

Если вы укажете более подробную информацию о том, как Form извлекает эти данные, кто-то может помочь вам выяснить, как его обновить. Например, вы используете привязку данных? Вы писали свой собственный код для извлечения записей?

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

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

  1. сохранить ссылку на элементы управления, которые вы создали, и удалить их из Form перед обновлением его.

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

Вы также можете рассмотреть возможность использования какого-либо элемента управления, который имеет встроенный механизм привязки данных, который сэкономит вам много работы. Например, GridView.

+0

Да .. уверен. Я сделал. Это не что иное понятие с кодом. Я использую MSaccess DB с просто получаю данные из базы данных.Мой проблемой является то, как я покажу записи с обновленными после нажатия кнопки удаления.Я уже упоминаю, что я получаю его при вызове конструктора. –

+0

Можете ли вы опубликовать код из своего конструктора? – Ran

+0

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

0

Не могли бы вы найти Invalidate()?

+0

да я тоже использую это.Invalidate(); Но :(не работает то, что я ищу. –

+0

Вы вызываете Invalidate в форме? Структура данных? Элемент управления? – ColinCren

0

Если вы заполняете форму в конструкторе, вам необходимо извлечь код загрузки в метод. Затем назовите это событие DeleteButton.OnClick после выполнения удаления.