2010-10-27 6 views
0

Je prévois d'autoriser un utilisateur à ouvrir un modalpopupextender contenant une vue de grille avec une zone de texte Filtre. Je le veux ainsi quand l'utilisateur tape dans un filtre, le filtre est appliqué au gridview et le contenu du gridview est alors mis à jour pour refléter le filtre appliqué - tout sans poster en arrière. Idéalement, le gridview sera filtré en fonction des types d'utilisateurs, plutôt que d'avoir à appuyer sur un bouton.Rebind gridview en utilisant AJAX (sans publication)

Je suppose qu'il utiliserait FilterParameters sur mon SqlDataSource et un UpdatePanel, mais quelqu'un peut-il offrir une explication plus approfondie sur comment je ferais ceci? Ce serait également bien si le code que j'utilise est 'général' et peut être utilisé avec n'importe quel autre GridView et DataSource.

Merci

Répondre

1

pas Pouvez-vous envelopper le gridview dans un UpdatePanel, puis sur le changement textbox rebind la source de données avec le filtre?

1

Placez le gridview dans un UpdatePanel et le TextBox en dehors de celui-ci. Ajouter un bouton caché à ce panneau qui est un déclencheur asynchrone, puis ajouter javascript onchange à la zone de texte pour cliquer sur ce bouton.

<asp:Button ID="DoRefresh" style="display:none;" UseSubmitBehavior="false" 
runat="server" OnClick="Recalculate()" /> 

En Page_Init:

myTextBox.Attributes.Add("onChange", 
"document.getElementById('" + DoRefresh.ClientID + "').click()"); 

Mettre le code retirage dans Recalculer()

Cela devrait le faire. Je suis sûr qu'il existe de bien meilleures façons de faire cela, mais si vous voulez utiliser des contrôles côté serveur tels que GridView, je pense que vous êtes coincé avec des publications partielles pour le mettre à jour. Soyez prudent, cependant, êtes-vous sûr de vouloir exécuter une requête chaque fois qu'ils tapent une lettre? J'ajoute que je pense que l'utilisation d'un plugin jQuery ou d'une autre solution côté client avec ajax, comme une autre réponse le suggère, est beaucoup plus logique que de le faire de cette façon. Ce n'est pas vraiment ce à quoi servent UpdatePanels et vous allez faire une publication (bien que partielle) chaque fois qu'ils tapent une lettre. Mais une publication est le seul moyen de dire au code côté serveur de mettre à jour votre page.

1

Vous iriez au serveur et exécuteriez une requête chaque fois qu'un utilisateur tape une lettre. Cela peut coûter très cher rapidement. Utilisez-vous un framework javascript comme jQuery? La plupart des frameworks auront une base de données qui entoure un tag <table> avec ce type de fonctionnalité.

Une recherche rapide Google trouve ceci pour jQuery: http://www.datatables.net/ (Il y a un tas d'autres, dojo et Yui ont leur propre bien)

Vous pouvez faire quelque chose comme:

$(document).ready(function(){ 
    $('#<% = GridView1.ClientID%>').dataTable(); 
}); 

Remarque , que cette solution a aussi ses inconvénients en fonction de la taille de l'ensemble de données.