Comment activer la pagination et le sorting sur ASP.NET 4.0 GridView par programme?

J’utilise ASP.NET 4.0 avec C # (Visual Web Developer 2010 Express).

J’ai réussi à implémenter un GridView simple lié à une source de données de procédure stockée à l’aide d’un code ASP.NET déclaratif, comme indiqué ici:

       <asp:SqlDataSource ID="sdsTrades" runat="server" ConnectionString="" ProviderName="" SelectCommand="usp_GetTrades" SelectCommandType="StoredProcedure">  

Cela fonctionne très bien, y compris la pagination et le sorting. Je souhaite supprimer SqlDataSource et utiliser code-behind (j’essaie de placer le code d’access à la firebase database à un endroit). Jusqu’ici j’ai ceci dans mon code-behind:

 protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { grdTrades.SelectedIndex = 0; DBUtil DB = new DBUtil(); grdTrades.DataSource = DB.GetTrades(); grdTrades.DataKeyNames = new ssortingng[] { "tradeId" }; grdTrades.DataBind(); } } // this is needed otherwise I get "The GridView 'grdTrades' fired event PageIndexChanging which wasn't handled." void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e) { grdTrades.PageIndex = e.NewPageIndex; grdTrades.DataBind(); } 

Mon code déclaratif ressemble maintenant à:

        

Le problème est que lorsque je clique sur un numéro de page, la page devient vierge. J’aimerais également mettre en œuvre le sorting, mais j’aimerais que la pagination fonctionne en premier. S’il vous plaît aider.

Merci

Vous devez lier votre GridView chaque fois que vous changez de page.

Par exemple:

 void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e) { grdTrades.DataSource = DB.GetTrades(); grdTrades.PageIndex = e.NewPageIndex; grdTrades.DataBind(); } 

Mon conseil serait de stocker vos résultats de DB.GetTrades() dans ViewState (ou Cache) afin que vous n’ayez pas besoin d’accéder à la firebase database chaque fois que vous changez de page.

Le sorting peut cependant devenir assez difficile.

Vous pouvez toujours utiliser un ObjectDataSource au lieu d’un SqlDatasource. Vous pouvez ensuite DB.GetTrades() votre DB.GetTrades() vers votre fonction DB.GetTrades() . Le sorting et la pagination fonctionneront automatiquement.

J’espère que cela pourra aider.

Vous pouvez créer une méthode pour lier la vue de grid au lieu de la lier à nouveau dans la page. En créant une méthode qui lie la vue de grid, vous pouvez toujours appeler la méthode pour lier la vue de grid à tout moment.

 protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { BindgrdTrades(); } private void BindgrdTrades() { DBUtil DB = new DBUtil(); grdTrades.DataSource = DB.GetTrades(); grdTrades.DataKeyNames = new ssortingng[] { "tradeId" }; grdTrades.DataBind(); } } void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e) { grdTrades.PageIndex = e.NewPageIndex; BindgrdTrades(); } } 

Je devais rendre mon compteur _PageIndexChanging public (je suis si nouveau sur asp.net que je ne sais pas pourquoi c’est important). La page serait par une erreur en disant qu’il ne pouvait pas trouver la classe. Ces messages ont été d’une grande aide pour faire fonctionner la pagination avec une logique quasi verbale. Merci à toutes les affiches d’avoir pris le temps de l’exposer aussi clairement. Voici le code que j’ai fini avec:

 public partial class Requests : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { BindgrdBuilds(); } } private void BindgrdBuilds() { // Link GridView to datasource GridView1.DataSource = BuildData.getBuilddata(); // Bind SQLDataSource to GridView after resortingeving the records. GridView1.DataBind(); } public void GridView1_PageIndexChanging(Object sender, GridViewPageEventArgs e) { // increment PageIndex GridView1.PageIndex = e.NewPageIndex; // bind table again BindgrdBuilds(); } } 

Je suis resté avec des colonnes AutoGenerated, et je fais une liaison de rangée à mes données sur la page cs que je n’ai pas incluse ci-dessus, mais voici mon code asp pour GridView:

    

J’espère que quelqu’un d’autre pourra utiliser cette information, ce fil était un excellent exemple simple à suivre. Maintenant que la pagination fonctionne, il est temps de prendre des risques et de donner un nouveau nom à GridView1: D