2009-09-17 8 views
1

J'ai une page qui contient un Gridview montrant un enregistrement d'une table db par exemple. "tblEmployee". Si un enregistrement est inséré/mis à jour/supprimé dans ce tableau, j'ai besoin que ma page soit rechargée de sorte que la grille affiche les enregistrements mis à jour. Les enregistrements peuvent être insérés/mis à jour/supprimés de toute autre application. Pour redéfinir le gridview je dois recharger la page. Supposons que j'ouvre la page dans mon navigateur et qu'aucune publication n'est effectuée. Après 10 minutes, un enregistrement est inséré dans la table par d'autres applications. Comment est-ce que je peux recharger la page automatiquement, pas manuellement en cliquant sur le bouton d'actualisation quand les enregistrements dans la table de DB ont changé? J'utilise Sql server 2005 comme DB et ASP.Net 3.5 (C#)Comment actualiser une page lorsque l'enregistrement dans la table db est modifié dans ASP.Net 3.5

Veuillez suggérer comment implémenter ceci.

Merci.

Répondre

2

Voici deux approches ... l'une utilisant un déclencheur, l'autre utilisant SqlDependency. Je recommanderais d'utiliser SqlDependency, mais je décrirais une autre approche parce que vous avez indiqué un problème avec SqlDependency.

Créer une table avec des colonnes pour le nom de la table et la date de la dernière mise à jour. Créez un déclencheur sur tblEmployee pour mettre à jour cette table sur toute insertion/mise à jour/suppression. Lorsque la page est chargée, vous devez stocker la dernière date de mise à jour en cours pour la table.

Selon la configuration de votre page, vous pouvez la stocker dans ViewState ou en tant que champ masqué sur la page. Ensuite, vous devrez rechercher des modifications. Il y a plusieurs façons de le faire. Vous pouvez écrire une méthode de page simple qui renvoie la dernière date de mise à jour, l'appeler à partir de JavaScript et la comparer à la date que vous avez stockée dans le champ masqué. Ou vous pouvez utiliser un UpdatePanel avec un contrôle Timer et le comparer à la valeur que vous avez stockée dans ViewState.

Maintenant, cette approche frappe la base de données plus que nécessaire. Si c'est un problème, utilisez SqlDependency avec SQL 2005 ou supérieur. Créez une SqlDependency et insérez la date actuelle dans le cache avec cet objet de dépendance. Sonder cet élément de cache de la page comme décrit ci-dessus. Lorsque la dépendance change (événement OnChange), mettez à jour la date de l'élément de cache à nouveau.

+0

J'ai besoin de plus de détails sur comment utiliser SqlDependency pour résoudre mon problème.Pouvez-vous m'envoyer du code pour résoudre mon problème? – Himadri

+0

Je n'ai pas le code pour cela, mais essayez quelque chose comme ça dans global.asax: 1) Appel SqlDependency.Start 2) Créer SqlCommand qui renvoie toutes les lignes de la table 3) Créer SqlDependency avec le SqlCommand 4) Enregistrer l'événement OnChange 5) Exécuter la commande. Définir l'élément de cache sur le datetime actuel 6) OnChange, mettre à jour l'élément de cache au datetime actuel 7) Sur la page, surveiller l'élément du cache pour savoir quand les données ont changé. Vous pouvez également modifier ce wrapper DBListener et l'appeler dans global.asax: http://blogs.microsoft.co.il/blogs/oshvartz/archive/2008/06/07/query-notification-dependency-sqldependency-class .aspx – chaiwalla

1

Vous pouvez utiliser la classe SqlDependency:

Voici un avoir par exemple commencé: SqlDependency in an ASP.NET Application (ADO.NET)

+0

La question est étiquetée ASP.NET! – veggerby

+0

@veggerby. Oui? Vous pouvez utiliser SqlDependency dans System.Data.SqlClient dans ASP.NET !! –

+0

Pouvez-vous s'il vous plaît me donner un exemple de code ou un lien de code d'échantillon s'il vous plaît? – Himadri

1

Je vois pas d'autre choix que d'avoir un mécanisme de vote, soit en utilisant setTimeout + jQuery ou ASP.NET AJAX Timer qui tire l'information à intervalles réguliers.

Fondamentalement, ce que vous voulez, c'est que le serveur informe le client qu'une mise à jour a eu lieu et que, dans une application Web/ASP.NET, la communication est toujours initiée par le client. Donc, l'interrogation est votre seule option.

Questions connexes