2010-03-12 8 views
2

ok j'ai un projet qui a beaucoup gridview dans ses pages ... maintenant je suis le tri des fridveiw en utilisant la fonction de tri comme ceci:le tri d'une gridview en classe

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     DataTable dt = Session["TaskTable2"] as DataTable; 

     if (dt != null) 
     { 

      //Sort the data. 
      dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression); 
      GridView1.DataSource = Session["TaskTable2"]; 
      GridView1.DataBind(); 
     } 

    } 

    private string GetSortDirection(string column) 
    { 
     // By default, set the sort direction to ascending. 
     string sortDirection2 = "ASC"; 

     // Retrieve the last column that was sorted. 
     string sortExpression2 = ViewState["SortExpression2"] as string; 

     if (sortExpression2 != null) 
     { 
      // Check if the same column is being sorted. 
      // Otherwise, the default value can be returned. 
      if (sortExpression2 == column) 
      { 
       string lastDirection = ViewState["SortDirection2"] as string; 
       if ((lastDirection != null) && (lastDirection == "ASC")) 
       { 
        sortDirection2 = "DESC"; 
       } 
      } 
     } 

     // Save new values in ViewState. 
     ViewState["SortDirection2"] = sortDirection2; 
     ViewState["SortExpression2"] = column; 

     return sortDirection2; 
    } 

mais ce code est répété dans beaucoup de pages donc j'ai essayé de mettre cette fonction dans une classe C# et essayer de l'appeler, mais je reçois des erreurs ....

pour les débutants je reçois l'erreur viewstate dire: |

« viewstate n'existe pas dans le contexte actuel »

alors comment dois-je aller à faire cela .... ??

grâce

donc c'est ce qu'il ya dans ma classe:

public string GetSortDirection(string column) 
    { 
     // By default, set the sort direction to ascending. 
     string sortDirection2 = "ASC"; 

     // Retrieve the last column that was sorted. 
     string sortExpression2 = ViewState["SortExpression2"] as string; 

     if (sortExpression2 != null) 
     { 
      // Check if the same column is being sorted. 
      // Otherwise, the default value can be returned. 
      if (sortExpression2 == column) 
      { 
       string lastDirection = ViewState["SortDirection2"] as string; 
       if ((lastDirection != null) && (lastDirection == "ASC")) 
       { 
        sortDirection2 = "DESC"; 
       } 
      } 
     } 

     // Save new values in ViewState. 
     ViewState["SortDirection2"] = sortDirection2; 
     ViewState["SortExpression2"] = column; 

     return sortDirection2; 
    } 

et je l'appelle de mon code comme ceci:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     DataTable dt = Session["TaskTable2"] as DataTable; 

     if (dt != null) 
     { 

      //Sort the data. 
      dt.DefaultView.Sort = e.SortExpression + " " + new impersonateClass().GetSortDirection(e.SortExpression); 
      GridView1.DataSource = Session["TaskTable2"]; 
      GridView1.DataBind(); 
     } 

    } 

et je reçois vue erreur d'état ...

est ici un moyen de mettre tout cela dans la classe ... parce qu'il se répète partout ...

+0

Bonjour, pouvez-vous également publier le code appelant? ViewState est-il dans lequel les 2 méthodes sont définies? – Seb

Répondre

2

Vous devez transmettre ViewState, car l'objet ViewState est membre de la classe Page. Une fois que vous avez déplacé le code dans une classe distincte, il n'a plus accès à l'objet ViewState.

public string GetSortDirection(string column, StateBag viewState) { 
    // Your code here. 
} 
+0

oui c'est un homme génial ... ok donc vous comprenez ce que je veux ... est-il un moyen que je peux mettre void protégé GridView1_Sorting (expéditeur d'objet, GridViewSortEventArgs e) également dans cette classe et appelez le tout derrière mon code> >> ??? – user175084

+0

Bien sûr. Rien ne vous empêche de transmettre ViewState, GridView et GridViewSortEventArgs dans votre nouvelle classe de tri commune. –

+0

J'ai essayé, mais je ne comprends pas comment appeler GridView1_Sorting (expéditeur d'objet, GridViewSortEventArgs e) .. s'il vous plaît pourriez-vous aider – user175084