2008-11-18 5 views
0

J'essaie de faire un gridview triable qui utilise une procédure stockée comme source de données, je ne voudrais pas qu'il réexécute la requête à chaque fois pour y parvenir. Comment puis-je faire fonctionner mon code actuel est:asp.net gridview tri sans données rebind

protected override void OnPreRender(EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    SqlCommand cmd2 = new SqlCommand("SR_Student_Course_List", new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RDCV2ConnectionString"].ConnectionString)); 
    try 
    { 
     cmd2.CommandType = CommandType.StoredProcedure; 
     cmd2.CommandTimeout = 120; 
     cmd2.Parameters.Add("student_id", SqlDbType.Char, 11).Value = student; 
     cmd2.Connection.Open(); 
     grdCourses.DataSource = cmd2.ExecuteReader(); 
     grdCourses.DataSourceID = string.Empty; 
     grdCourses.DataBind(); 
    } finally 
    { 
     cmd2.Connection.Close(); 
     cmd2.Connection.Dispose(); 
     cmd2.Dispose(); 
    }}} 

Ce code lie uniquement les données quand il est pas un postback, le gridview a viewstate activé. En appuyant sur les en-têtes de colonnes, une publication se produit mais aucun tri ne se produit. Si quelqu'un a une solution simple pour cela s'il vous plaît laissez-moi savoir ou même mieux un tri ajax qui permettrait d'éviter la publication serait encore mieux. L'ensemble de données est relativement petit, mais prend beaucoup de temps à interroger ce qui est pourquoi je ne voudrais pas requery sur chaque sorte.

Répondre

4

Si vous n'êtes pas en train de lire les résultats, et que vous faites juste une lecture, alors quelque chose comme le plugin jquery tablesorter serait une solution rapide et facile. Je l'ai utilisé sur des tables jusqu'à 1400 lignes et fonctionne très bien, bien que ~> quelques centaines probablement mieux sur les putas lents.

Si le gridview est modifiable, puis aspnet validation événement/entrée peut cracher un mannequin si vous ne passez pas par l'enregistrement correct des scripts client etc.

+0

Utilisé le classeur de table jquery fonctionne fantastique, ma sortie de jeu de données est seulement 20 lignes max il est long de le calculer car il s'agit de données agrégées. – PeteT

0

Vous pouvez essayer de stocker les données dans l'état d'affichage (ou le cache).

0

Dans votre cas, j'utiliser un SqlDataAdapter et remplir un DataTable. Ensuite, placez le DataTable dans une variable de session. Lorsque le GridView est en train de trier, vérifiez si la variable Session existe toujours. Si ce n'est pas le cas, remplissez à nouveau le DataTable. Enfin, trier le DataTable à l'aide d'un DataView et relier le GridView avec le DataView.