2009-10-19 6 views
3

J'écris un programme dans VB.Net pour gérer les messages texte envoyés via une API. Il vous permet d'afficher les messages dans un datagridview et de filtrer par date, envoyé/non envoyé, etc.Informer l'utilisateur qu'un DataGridView est rempli

Pour charger les messages, j'exécute une instruction SQL et récupère un DataTable qui est ensuite défini en tant que DataSource pour mon DataGridView contrôle. Le problème est que, selon les filtres sélectionnés, l'utilisateur peut sélectionner un grand nombre d'enregistrements et mettre à jour le DataSource prend un certain temps. Je veux informer l'utilisateur de ce temps de chargement en fournissant une barre de progression ou une étiquette quelconque.

J'ai utilisé des barres de progression avant de boucler des données mais cela est en train de les charger toutes en même temps. J'ai pensé à afficher une étiquette lorsque l'utilisateur clique pour charger les données puis les cacher quand les données sont chargées. Mais cela arrive instantanément, même lorsque les données sont encore en cours de chargement.

Y at-il un événement sur le DataGridView que je peux utiliser peut-être? Quelque chose comme .DataSourceLoadStart et .DataSourceLoadFinished. Je sais que je suis juste en train de faire ces événements ... mais j'espère que cela rendra plus clair ce que je veux.

Répondre

3

Vous pouvez définir l'étiquette pour qu'elle soit visible lorsque vous cliquez sur le chargement et essayer l'événement: DataGridView.DataBindingComplete pour le masquer, cet événement est appelé lorsque la liaison est terminée.

MSDN Link - DataBindingComplete

+0

Cela fait ce qu'il devrait faire. Je pense que le problème est de rendre l'étiquette visible sur le clic du bouton de chargement. Au moment où ça se passe ... cliquez sur> afficher l'étiquette de chargement> charger les messages> liaison de données terminée (masquer le message à nouveau) Mais l'étiquette ne s'affichera pas pendant le chargement des données. Il affiche l'étiquette une fois que DataGridView est rempli, puis le masque immédiatement à nouveau. Même si mon code va comme:

 lblLoading.visible = true LoadMessages() 
Donc, ça devrait montrer l'étiquette en premier ... ??? – Banford

+1

Ajouter: Application.DoEvents() après l'appel pour afficher l'étiquette, de cette façon, il donnera la priorité à l'affichage de l'étiquette avant qu'il ne se charge de charger les messages – Tanner

+0

MSDN Link: Doevents(): http://msdn.microsoft. com/fr-fr/library/system.windows.forms.application.doevents.aspx – Tanner

0

Un peu hors sujet, mais ... Je me demande si vous pouvez joindre un panneau de mise à jour AJAX with activity/loading image à un gridview? Je ne pense pas que je l'ai jamais vu, mais voici une excellente application pour cela.

+0

Je voudrais, et ai déjà utilisé cette méthode pour obtenir des résultats similaires. Mais c'est pour une application de bureau, désolé si je ne l'ai pas précisé. – Banford

Questions connexes