2008-10-09 3 views
2

J'ai une application ASP.NET qui affiche diverses vues dans une base de données de séquences de protéines. En tant que visiteur navigue les données, je voudrais qu'ils puissent sélectionner un CheckBox dans la rangée GridView pour marquer des séquences pour le télécharger plus tard comme un fichier texte compressé. Je ne veux pas stocker les sélections, elles devraient donc être valides pour la session.Ajouter une colonne CheckBox à un GridView avec persistance

Mon idée en ce moment est d'ajouter un TemplateField à la GridView et ensuite ajouter un CheckBox à cela. J'ai l'intention de gérer les événements de vérification et de stocker les ID de séquence dans l'état de la session. Lorsque l'utilisateur se dirige vers la page de téléchargement, j'obtiens les données de la session, affiche la liste des séquences qu'il est sur le point de télécharger, puis envoie le fichier. Évidemment, je vais aussi devoir refaire les données de session sur chaque changement de formulaire/changement de page.

J'ai donc fait quelques questions à ce sujet:

1) que je fais trop de travail? Existe-t-il un moyen plus simple de mettre en œuvre cela?

2) Tous les allers-retours vers le serveur pour l'état de la session sont-ils susceptibles d'être un problème de performance? Je peux mettre un bouton «Enregistrer pour téléchargement» sur la page pour le lot pour aider les choses. La gestion des événements de vérification semble juste plus tolérante aux erreurs puisque vous ne pouvez pas perdre accidentellement votre état si vous vous éloignez.

3) Est-il possible de trier le GridView par la colonne case cochée? Je voudrais trier d'abord la colonne case cochée puis la colonne actuellement triée (par exemple, si le GridView est trié par nom de famille, tri par la colonne de vérification, puis par nom de famille). Dans le cas où cela est important, j'utilise C#, .NET 3.5, VS2008 et j'utilise la méthode simple de glisser-déposer pour créer une GridView à partir d'une table SQLServerExpress.

Répondre

0

Je ne suis pas sûr qu'il ya un moyen plus facile de le faire, mais comme pour vos autres questions:

2.) Vous devez décider par vous-même l'équilibre entre la robustesse et le trafic réseau. Si vous utilisez l'événement check, vous allez revenir au serveur un peu. Si vous utilisez un événement différent (perdre le focus sur la grille, un clic explicite sur le bouton «mettre à jour/enregistrer» ou naviguer vers une autre page), vous réduisez le trafic au détriment de la perte éventuelle d'informations. C'est une décision de conception d'interface utilisateur sans "bonne" réponse.

3.) C'est possible, même si ce n'est peut-être pas automatique. Je sais que DataGridViews génèrera des gestionnaires pour trier automatiquement les cases à cocher. Je ne suis pas sûr que ce soit aussi facile avec GridView. Y a-t-il une raison pour laquelle vous utilisez un GV et pas un DGV?

+0

DataGridView est uniquement Windows Forms. System.Web.UI.WebControls a seulement le DataGrid et le GridView. –

1

Utilisez AJAX via une méthode de page pour suivre l'état de la case à cocher dans l'état de la session. Cela minimisera le coût du voyage aller-retour.

Je ne pense pas que vous serez en mesure de trier par la case à cocher dans le GridView que vous devez spécifier la colonne de tri. Vous pouvez le faire en créant une source de données synthétique qui joint vos informations de session enregistrées aux données de la table, mais pas en utilisant une SQLDataSource connectée directement à la table.