DataGridView - Limiter le nombre de lignes affichées [Résolu]

Signaler
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006
-
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006
-
Bonjour,

J'ai un DataSet contenant + de 1000 entrées.
Je le lie à un DataGridView.

J'aimerais effectuer une sorte de pagination du DataGridView.
C'est-a-dire que j'aimerais afficher les entrées par 50 (max)

Comment je peux dire au DataGridView qu'il ne doit pas tout afficher ?
Dois-je créer une autre table dans mon DataSet qui, elle, ne comportera
que 50 entrées ?

J'espère avoir été assez clair !

Merci d'avance

17 réponses

Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Ca y est,

je recupere le DefaultView de la DataTable, j'en fais une copie (ne semble pas fonctionner sinon) et je la trie.

Bon, ok, il faut retransformer cette DataView en DataTable mais ca fonctionne.
A part le fait que j'ai réellement l'impression de "bidouiller" pour pouvoir faire une pagination d'une DataTable.

J'espère avoir été assez clair !
Merci encore.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Bonjour,
Je ne sais pas si cette solution est la bonne mais tu peut essayer de mettre en place une boucle qui affiche tes données. et ensuite, dès que tu as atteint la valeur souhaitée tu sort de la boucle et par conséquent, tu arrête l'affichage.
Comme ceci :

int NbrEntrees = a; //Nombre d'entrées que tu souhaite afficher
For(int i=0 ; i<= NbrEntrees ; i++)
{
   /*Ici, tu met ton code pour afficher chaque entrée*/
}

En éspèrant que cela t'aide.

_________________________________________________________________________
Woot
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Sans vouloir te vexer,

mon problème n'est pas de faire une boucle.
Le truc c'est que tu ne gère pas réellement l'affichage dans un DataGridView.
C'est quand tu le lies que le Framework affiche dedans TOUT le DataSet.
Il n'y a aucun endroit où je gère moi-même l'insertion des lignes dans le DataGridView.

Quelqu'un aurait une solution ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Salut,
Tu peux créer une View (en mettant des filtres) puis afficher cette View...
Ca me semble le plus propre à priori.

VC# forever
=13319
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Salut,
Ok je n'avais pas bien saisie ton problème.

_________________________________________________________________________
Woot
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Salut Bidou,

Alors je ne sais pas comment créer une View.
Est-ce facile à créer à partir d'une partie de DataSet ?

As-tu déjà utiliser ce genre de chose (pour eviter de chercher pdt des heures) ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Regarde du côté de la classe DataView, si mes souvenirs sont bons, c'est assez simple à utiliser... Je n'ai pas d'exemples directement sous la main, mais dans MSDN tu devrais trouver ton bonheur.

VC# forever
=13319
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Ok, merci,




je vais regarder de ce coté là et
 aussi sur les 

DataGridViewRowCollection

Je ne valide pas de réponse tant que je n'ai pas réussi.

Merci à vous deux !
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
A mon avis, t'as fait trop compliqué....
Petit exemple fait très rapidement :

DataTable _dt =
new
DataTable();

...
...
this._dt.Columns.Add(
"string",
typeof(
string));

this._dt.Columns.Add(
"int",
typeof(
int));

this._dt.Columns.Add(
"char",
typeof(
char));

this._dt.Rows.Add(
"Test", 1,
'a');

this._dt.Rows.Add(
"Coucou", 2,
'g');

this._dt.Rows.Add(
"CS", 3,
's');

this._dt.Rows.Add(
"C#", 4,
'p');

this._dt.Rows.Add(
"Salut", 5,
'x');

this.dataGridView1.DataSource =
this._dt;
...
...
DataView
dv =
new
DataView(
this._dt);

for (
int i =
this._dt.Rows.Count - 1; i > 2; i--) dv.Delete(i); // Laisse les 3 premières lignes

this.dataGridView1.DataSource = dv;

VC# forever
=13319
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Non, je peux pas faire ça.

Parce que voilà, j'ai disons par exemple 100 éléments ds mon DataSet.
Je veux pouvoir les trier (les 100) mais les afficher que par 10 par exemple.

Je ne peux pas faire ce que tu me dis si je veux afficher les éléments 50 à 60 par exemple.

En gros, je dois gérer manuellement la pagination et vu que je ne peux pas récupérer les Rows du DataView (trié) directement, je DOIS passer par un DataSet intermédiaire !

Je sais pas si c'est très clair ?!?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Pas vraiment, ou est le probleme si tu dois afficher les éléments 50 à 60 ?

VC# forever
=13319
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Ben, en fait, dans ton exemple, tu supprimes les lignes que tu ne veux pas afficher.

C'est une perte de temps énorme si j'ai 10000 éléments ds ma Datatable et que je veux en afficher que 10.

C'est pour ça que je prends uniquement les éléments voulus dans ma DataView triée et que je les copie manuellement dans une autre DataTable
que je lie au DataGridView.

C'est plus clair maintenant ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Euh moui, et avec les filtres offert par le DataView, tu peux rien faire ?
Parce que le delete, c'était juste un exemple...

VC# forever
=13319
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Non, je vois rien dans la doc de ces filtres qui pourrait m'aider.
A part le "count" qui pourrait m'aider à exclure ceux que je veux pas afficher.

Mais c'est fou, je dois pas être le seul à vouloir faire de la pagination d'une Datatable sur une DataGridView. C'est à croire qu'ils ne l'ont pas prévu.

Alors que le Framework le fait très facilement en ASP, en C# on doit se débrouiller !
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
effectivement les datagrid sont mieux gérer en asp.


J'ai eu le meme probleme que toi, que j'ai résolu en gérant moi meme l'affichage.

J'affiche 20 lignes et j'ai fais des boutons suivant précédent dernier premier 10suivant et 10précédent.


quelques liens ^pour t'aider :


http://support.microsoft.com/default.aspx?scid=kb%3Bfr%3B307710

http://faqcsharp.developpez.com/?page=form_dgrid#form_dgrid_select_row


et surtout celui qui ma le plus aidé :

http://support.microsoft.com/default.aspx?scid=kb%3Bfr%3B307710


bonne chance
Messages postés
11
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
7 juillet 2006

Tu as donc fais la pagination "à la main" comme moi.
Merci pour tes liens.

Et surtout Merci encore de ton aide !