Très grande quantité de données sur gridview dans asp.net
J'ai une grande quantité de données (une requête sql avec 20000 dossiers) et le remplissage de mon datagrid avec cette quantité de données prend environ 10 minutes, c'est ma gridview définition:
<asp:GridView ID="g" runat="server" Height="113px" Width="817px"
BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px"
CellPadding="3" GridLines="Vertical" AllowPaging="True" Font-Size="Small"
PageSize="30">
<AlternatingRowStyle BackColor="#DCDCDC" />
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#0000A9" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#000065" />
<PagerStyle cssClass="gridpager" HorizontalAlign="Left" />
</asp:GridView>
Comme vous pouvez le voir je l'ai activé sur true, les cases à cocher allowcustompaging propriété.
C'est la façon dont je la liaison de données:
DataSet dts = new DataSet();
OracleDataAdapter oad = new OracleDataAdapter(query, co.conn);
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
OracleDataReader reader = cmd.ExecuteReader();
oad.Fill(dts);
g.DataSource = dts.Tables[0];
g.DataBind();
Comment puis-je améliorer la performance?
Quand je remplir le dataset (oad.De remplissage(dts);) prend 10 minutes pour le remplir. Est-ce parce que j'ai mis les 20000 dossiers à la fois? Est-il possible d'afficher uniquement les 30 premiers enregistrements et de rappeler les données lorsque l'utilisateur de paginer le gridview? Est-il une autre manière d'améliorer les performances?
Alors, quelle est la question?
où est la question ?
J'ai ajouté plus d'informations dans mon premier post
J'ai ajouté plus d'informations dans mon premier post
OriginalL'auteur Naty Bizz | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Si ma compréhension est correcte, vous voulez ajouter serveur d'échange
Lorsque vous ajoutez simplement
AllowPaging="True"
de la grille, par défaut, leGridView
n'a aucune idée de la façon de pagination vos données à partir du serveur, la pagination est en cours d'exécution dans la mémoire après l'ensemble des résultats ont été extraites de la base de données et cela se produit chaque fois que l'GridView
est lierJe pense que vous voulez ajouter du serveur d'échange (échange dans le serveur et de les envoyer au client un petit tas de dossiers), pour ce faire, vous pouvez profiter de plusieurs ASP.Net contrôles de source de données.
Puisque vous faites la connexion à votre base de données manuellement, vous devez ajouter manuellement le code de pagination dans vos requêtes et carte code pour le contrôle
Je pense que la seule contrôles de source de données qui peuvent vous aider (puisque vous êtes à l'aide d'Oracle comme base de données) sont
GridView
de contrôle pour fournir de pagination, cependant, vous devez ajouter manuellement le code à vos questions ou procédures de la banque pour paginer vos données dans le serveurSi vous voulez être à l'aide de EF ou NHibernate par exemple, il serait plus facile, le code devrait ressembler à:
Exemple d'utilisation de la
ObjectDatasource
ASPX
Composant De Données
OriginalL'auteur Jupaol
La solution de facilité serait de saisir le top 30 des lignes, puis, quand vous prenez le prochain jeu que vous prenez la prochaine à 30 par faire top 30 where id > @lastid.
De cette façon, vous ne jamais demander 30 lignes et ne pas avoir à se soucier de l'obtention de l'ensemble du jeu d'enregistrements de la base de données.
OriginalL'auteur Jonas
Pagination signifie simplement qu'il n'affichera que les "pagesize' éléments à la fois, mais il aura encore besoin d'obtenir l'ensemble des données de la base de données avant de pouvoir afficher ces quelques éléments parce que c'est ce que vous êtes à la requête qui lui dit de faire.
Ce que vous devez faire est de modifier la requête, de sorte que c'est seulement à aller chercher de la "pagesize, et ensuite, vous devez ajouter un gestionnaire d'événements pour l'
OnPageIndexChanging
événement de sorte que vous pouvez ré-interroger la base de données pour la prochaine pagesize' éléments. (Ou preivous, ou que ce soit, basé sur la pagination des options que vous avez définies. L'événement args contient la page d'index de l'utilisateur le demande.)Si vous faites un peu de recherche sur le web pour "gridview d'échange" ou similaire, vous pouvez trouver des exemples de code, mais ils varient très peu en fonction de la base de données que vous utilisez, comment vous allez récupérer, et ainsi de suite.
De la pagination pour oracle :
https://stackoverflow.com/a/241643/351383
OriginalL'auteur Servy