Comment activer la pagination et le tri sur ASP.NET 4.0 GridView par programmation?
Je suis en utilisant ASP.NET 4.0 avec C# (Visual Web Developer 2010 Express).
J'ai réussi à implémenter un simple GridView lié à une procédure stockée de la source de données à l'aide déclarative ASP.NET code comme indiqué ici:
<asp:GridView
ID="grdTrades"
runat="server"
DataKeyNames="tradeId"
EnablePersistedSelection="true"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="false"
DataSourceID="sdsTrades"
>
<Columns>
<asp:CommandField ShowSelectButton="true" ButtonType="Link" SelectText="Select" />
<asp:BoundField DataField="tradeId" HeaderText="TradeId" ReadOnly="True" SortExpression="tradeId" />
< ... more columns ... >
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="sdsTrades" runat="server"
ConnectionString="<%$ ConnectionStrings:TradesDB %>"
ProviderName="<%$ ConnectionStrings:Trades.ProviderName %>"
SelectCommand="usp_GetTrades" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
Il fonctionne très bien y compris de pagination et de tri. Je veux enlever le SqlDataSource et utilisez le code-behind (je suis en train de mettre la base de données de code d'accès dans un seul endroit). Pour l'instant 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 string[] { "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 déclarative code ressemble maintenant à:
<asp:GridView
ID="grdTrades"
runat="server"
EnablePersistedSelection="true"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="false"
OnPageIndexChanging="grdTrades_PageIndexChanging"
>
<Columns>
<asp:CommandField ShowSelectButton="true" ButtonType="Link" SelectText="Select" />
<asp:BoundField DataField="tradeId" HeaderText="TradeId" ReadOnly="True" SortExpression="tradeId" />
< ... more columns ... >
</Columns>
</asp:GridView>
Le problème est que lorsque je clique sur un numéro de page de la page devient vide. Je tiens également à mettre en œuvre le tri, mais souhaitez obtenir la pagination de travail en premier. S'il vous plaît aider.
Grâce
source d'informationauteur Mark Allison
Vous devez vous connecter pour publier un commentaire.
Vous devez lier votre GridView chaque fois que vous changez de page.
Par exemple:
Mon conseil serait de stocker vos résultats de
DB.GetTrades()
dans le ViewState (ou Cache) de sorte que vous n'avez pas besoin d'aller à la base de données chaque fois que vous changez de page.Tri peut devenir très difficile quand vous faites cela, cependant.
Vous pouvez toujours utiliser un ObjectDataSource au lieu d'un SqlDatasource. Vous pouvez ensuite pointer votre ObjectDataSource de regarder votre
DB.GetTrades()
fonction. Le tri et la Pagination fonctionnera automatiquement.Espère que ça aide.
Vous pouvez créer une méthode pour la liaison de l'affichage de la grille au lieu de lier à nouveau dans la Pagination. Par la création d'une méthode qui lie l'Affichage de la Grille, vous pouvez toujours appeler la méthode pour Lier l'affichage de la grille à chaque fois que vous le souhaitez.
J'ai dû faire mon _PageIndexChanging compteur pour le public (je suis donc de nouveau à asp.net que je n'ai aucune idée de pourquoi c'est important). La page par le biais d'un message d'erreur indiquant qu'il ne pouvait pas trouver la classe. Ces postes ont été d'une grande aide pour obtenir la pagination de travail avec près de verbatim de la logique. Merci à tous les posters de prendre le temps de la déposer clairement. Voici le code que j'ai terminé avec:
J'ai collé avec générés automatiquement les colonnes, et je fais une ligne de liaison à mes données sur le cs page que je n'ai pas inclus ci-dessus, mais voici mon code asp pour le contrôle GridView:
J'espère que quelqu'un d'autre peut faire usage de cette info, ce fil a été un grand, simple exemple à suivre. Maintenant que la pagination fonctionne, il est temps de commencer à real de fantaisie et de venir avec un nouveau nom pour GridView1 😀