Датагрид не обновляется при изменении данных - PullRequest
3 голосов
/ 30 мая 2010

Есть ли способ, чтобы сетка данных прослушивала базу данных и автоматически обновляла данные при изменении данных базы данных? Я использую базу данных SQL Server.

Я бы хотел использовать Linq-2-SQL, если это возможно

Ответы [ 2 ]

2 голосов
/ 30 января 2011

Потому что @Slaggg спросил: есть довольно простые способы сделать это, но они почти наверняка потребуют большого количества кодирования, это значительно повлияет на производительность, и я сильно подозреваю, что это будет более беда чем стоит.

Тем не менее, для типичного n-уровневого приложения на очень высоком уровне вам понадобится:

(1) Способ уведомления среднего уровня об изменении данных. Вы можете использовать триггеры пользовательского кода внутри каждой таблицы, которые запускают какие-то уведомления (возможно, с использованием хранимых процедур WCF и CLR), или вы можете использовать объект SqlDependency . Вероятно, второй будет работать лучше.

(2) Способ уведомления каждого клиента, подключенного к этому среднему уровню. Предполагая, что вы используете WCF, вам нужно использовать одну из доступных дуплексных привязок, например Net.TCP или HttpPollingDuplex (для Silverlight). Вам нужно убедиться, что это настроено правильно как на клиенте, так и на сервере. Вам также нужно будет вручную отслеживать, какие клиенты могут быть заинтересованы в обновлении, чтобы вы могли знать, какие из них нужно обновить, и вам нужно будет удалить их из этого списка, когда они исчезнут или истечет время ожидания. У Томека из команды MS WCF есть несколько довольно хороших примеров в его блоге , которые вы, возможно, захотите исследовать.

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

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

Надеюсь, это поможет.

1 голос
/ 02 июня 2010

Зависит от того, где вы обновляете базу данных:

  • Из того же контекста (в Silverlight, ты добавляешь, удаление, редактирование на той же странице)
  • Из ChildWindow в вашем Приложение Silverlight
  • Из внешний, не связанный инструмент, снаружи вашего приложения Silverlight
...