2010-07-21 6 views
3

J'ai un GridView que je lie à l'exécution à un ensemble de données via une requête. Je gère la pagination en utilisant les événements PageIndexChanging et PageIndexChanged pour définir la propriété PageIndex de GridView en postback à partir du pagineur. Bien que cela fonctionne correctement, le problème est la performance avec> 7800 lignes dans cette table. Il doit renvoyer l'ensemble des résultats pour chaque opération de pagination. Si j'utilise la clause MySQL LIMIT offset,pagesize, j'obtiens les résultats < 50ms. Ma question est comment puis-je utiliser la clause LIMIT dans ma requête pour accélérer la pagination? J'ai en quelque sorte besoin de calculer le décalage dynamiquement. Je connais la taille de la page lors de l'exécution via GridView.PageSize.ASP.NET GridView Pagination avec MySQL LIMIT

MISE À JOUR: Mon nouveau problème est que les contrôles de paginations GridView ont disparu, probablement parce que seulement 10 enregistrements reviennent de chaque requête (PageSize = 10)

Merci, Mark

Répondre

0

Vous savez aussi la page nombre, non? Décalé par le numéro de page * pagenumber.

+0

Cela semble évident quand vous regardez ça :) Mon nouveau problème est que les contrôles de pagination ont disparu, vraisemblablement parce que seulement 10 enregistrements reviennent de chaque requête (PageSize = 10). –

+0

C'est un problème différent. – MCain

0

Le contrôle ObjectDataSource (http://msdn.microsoft.com/fr-fr/library /9a4kyhcx%28v=vs.90%29.aspx) est un mécanisme pour la pagination personnalisée et peut gérer la pagination à travers une grande quantité de données. La pagination personnalisée garantit que seul l'ensemble précis d'enregistrements requis pour une page de données particulière est extrait de la base de données à la fois.

L'utilisation du contrôle ObjectDataSource est la suivante:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL" 
    SelectMethod="GetProductsPaged" EnablePaging="True" 
    SelectCountMethod="TotalNumberOfProducts"> 
</asp:ObjectDataSource> 

Le TypeName est le nom de la classe qui contient la GetProductsPaged et TotalNumberOfProducts fonctions. Une représentation possible de la classe ProductsBLL est la suivante:

public class ProductsBLL 
{ 
    public int TotalNumberOfProducts() 
    { 
    int recordCount = 0; 
    if (databaseObj.OpenDatabase()) 
    { 
     recordCount = databaseObj.DBTotalNumberOfProducts(searchQuery); 
     databaseObj.CloseDatabase(); 
    } 
    return recordCount; 
    } 

    public DataTable GetProductsPaged(int startRowIndex, int maximumRows) 
    { 
    DataTable pagedDataDV = null; 
    if (databaseObj.OpenDatabase()) 
    { 
     pagedDataDV = databaseObj.DBGetProductsPaged(searchQuery, startRowIndex, maximumRows); 
     databaseObj.CloseDatabase(); 
    } 
    return pagedDataDV; 
    } 
} 

La fonction DBTotalNumberOfProducts obtient le nombre total de lignes pour la requête présentes donné. La fonction DBGetProductsPaged obtient les données de la base de données pour la requête en utilisant MySQL LIMIT mot-clé. La LIMIT utilise les valeurs du startRowIndex et les variables maximumRows. La valeur du maximumRows sera une constante et devrait être la même que la taille de la page de la grille.

Les données peuvent être liés au contrôle du réseau en utilisant le code suivant:

GridData.DataSourceID = "ObjectDataSource1"; 
GridData.DataBind(); 

Le site suivant donnera plus d'informations sur le contrôle ObjectDataSource: http://msdn.microsoft.com/en-us/library/bb445504.aspx