Datagrid ne s'actualise pas sur datatables modifiées

Est-il possible d'avoir un DataGrid écouter la database et mettre à jour automatiquement datatables si datatables de la database sont modifiées? J'utilise une database SQL Server.

Je voudrais utiliser Linq-2-SQL si possible

Parce que @Slaggg a demandé: il y a des moyens assez simples de le faire, mais ils impliqueront certainement beaucoup de encoding, cela affectera la performance de façon significative, et je soupçonne fortement que ce sera plus difficile que ça vaut.

Cela dit, pour une application typique à n niveaux, à un niveau très élevé, vous aurez besoin de:

(1) Un moyen d'informer le niveau intermédiaire lorsque datatables changent. Vous pouvez utiliser des triggersurs de code personnalisé dans chaque table qui triggers une sorte de notification (peut-être en utilisant des procédures stockées WCF et CLR), ou vous pouvez utiliser un object SqlDependency . Probablement le second fonctionnerait mieux.

(2) Un moyen d'informer chaque client connecté à ce niveau intermédiaire. En supposant que vous utilisez WCF, vous devez utiliser l'une des bindings duplex disponibles, telles que Net.TCP ou HttpPollingDuplex (pour Silverlight). Vous devez vous assurer que cela est correctement configuré sur le client et le server. Vous devrez également garder une trace des clients susceptibles d'être intéressés par la mise à jour, afin que vous sachiez lesquels mettre à jour, et vous devrez être en mesure de les retirer de cette list lorsqu'ils disparaîtront ou expireront. Tomek, de l'équipe MS WCF, a de très bons exemples sur son blog que vous pourriez vouloir étudier.

(3) Un mécanisme pour mettre à jour le model du client local et / ou viewmodel et / ou l'interface user une fois que vous recevez la notification du niveau intermédiaire que quelque chose a changé. C'est plus compliqué que vous ne le pensez: il est assez difficile de synchroniser votre interface avec votre model de données dans des circonstances normales, mais cela devient beaucoup plus compliqué lorsque ce model de données peut aussi changer sous l'autre direction.

L' idée derrière ces sortes de notifications est assez simple: mais get tous les détails est susceptible de vous garder debugging dans la nuit. Et le gars qui doit supporter tout ça dans deux ans va maudire ton nom.

J'espère que cela t'aides.

Cela dépend de l'endroit où vous mettez à jour la database:

  • Dans le même context (dans Silverlight, ajoutez-vous, supprimez-vous, éditez-vous sur la même page)
  • À partir d'une window ChildWindow dans votre application Silverlight
  • À partir d'un outil externe non associé, en dehors de votre application Silverlight