C# - Limitation du nombre d'enregistrements dans un datagrid

Signaler
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004
-
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004
-
Bonjour,

Comment faire pour limiter le nombre d'enregistrements à l'affichage dans un datagrid ?

Par exemple, mon critère de selection dans un form de recherche est trop vague. La requête me renvoie 100 records. Je veux que si le nombre de records dépasse 50 une message box s'affiche pour demander la modification du critère de recherche.

Merci d'avance

Michel

10 réponses

Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
13
Quelle est ta procédure pour l'affichage (ou liaison) des données dans ton DataGrid ?

[Membre du laboratoire .NET de SUPINFO]
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004

if (textBoxRecNom.Text != "")
{
dataSetRec.Clear();
oleDbDataAdapter2.SelectCommand.CommandText= "SELECT NomFamille, Prénom, Poste,RéfEmployé, TélProfessionnel, Titre FROM Employés WHERE NomFamille like '" + textBoxRecNom.Text + "%'";

oleDbDataAdapter2.Fill(dataSetRec);
}

Michel
Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
13
ben pour afficher juste les 10 premiers par exemple, dans ton ordre SQL tu rajoute :

LIMIT 0, 10


[Membre du laboratoire .NET de SUPINFO]
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004

En fait, je ne cherche pas à limiter ma requête aux 10 premier records. Mais si le résultat de ma requête dépasse , par exemple, 100 records, j'aimerais afficher un messageBox " Trop de d'enregistrement. Affiner votre sélection". Je ne sais pas comment récupérer le nombre d'enregistrement pour pouvoir afficher le message et ne pas déclencher l'action Fill.

J'espère que c'est assez clair ...

Merci
Michel
Messages postés
24
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
25 février 2004
2
Avant d'affecter ton Dataset a ton datagrid, tu peux verifier le nombre d'enregistrement par
if (dataSetRec.tables[0].Rows.Count > 100)
    MessageBox.Show("blablabla");


Stegars
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004

Si j'utilise ton instruction avant d'affecter le datagrid avec l'instruction Fill, le rowcount est à zéro. Sais tu comment faire pour lancer la requête sans affecter le datagrid (Fill) de manière à ce que je puisse utiliser ton instruction après ?

Merci beaucoup

Michel
Messages postés
24
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
25 février 2004
2
La méthode Fill(), appartient a un DataAdapter et non au Datagrid et c'est pour remplir ton dataset qui lui remplira to datagrid.

Alors tu utilise la méthode Fill() pour remplir ton dataset et comme tu est déconnecter de la database, ton resultset est en mémoire et le count est disponible.

pour remplir ton datagrid par la suite tu utilise:
datagrid.DataSource = dataSetRec.tables[0].DefaultView
(Virifie la syntax exact...)

j'espère que le tout sera t'aider.

Stegars
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004

Désolé mais je n'ai pas compris ton explication. Voilà ce que je fais:

if (textBoxRecNom.Text != "")

{

dataSetRec.Clear();
oleDbDataAdapter2.SelectCommand.CommandText = "SELECT NomFamille, Prénom, Poste,RéfEmployé, TélProfessionnel, Titre FROM Employés WHERE NomFamille like '" + textBoxRecNom.Text + "%'";

MessageBox.Show("ctl row count: " + dataSetRec.Tables[0].Rows.Count);//row Count = 0

if (dataSetRec.Tables[0].Rows.Count > 2)

{
MessageBox.Show("Stop: ");
}

else

{
oleDbDataAdapter2.Fill(dataSetRec);
}

}

Je n'arrive pas à voir comment insérer ta méthode .

Merci d'avance si tu peux préciseer

Michel
Messages postés
24
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
25 février 2004
2
Désolé, je crois que le titre de ce poste protait a confusion!

Selon ce que je vois avec ton code, ce n'est pas un Datagrid que tu veux limiter mais ton Dataset et donc ta requête elle même, étant donné que tu mais la condition avant la methode Fill du DataAdapter.

Dans ce cas je ne vois qu'une autres solution qui est de faire un "select Count(*) FROM Employés WHERE NomFamille like '" + textBoxRecNom.Text + "%'" avant ta vrai requête. Mais cela te force a aller sur la base de donnée deux fois(une pour le count et une autre pour le résultats.).

Dans ce cas, tu peux utilisé une OleDBCommand et le méthode ExecuteScalar qui retrouve la première valeur de la requête.

Stegars
Messages postés
17
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
3 février 2004

C'est ce que j'avais essayé de faire : une requête avec un select count(*) pour récupérer le comptage avant de faire la requête select. Mais je ne sais pas(désolé je débute en c#) comment récupérer le résultat cette première requête sans évidemment l'affecter dans le datagrid.

Michel