Trier un DataGrid

Résolu
Gaxx
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008
- 8 mars 2005 à 18:13
Gaxx
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008
- 14 mars 2005 à 10:39
Bonsoir,
J'utilise plusieurs DataGrid (DG) que je remplis à partir d'une Hashtable (HT). Mes clef de DG correspondent à mes clefs de HT, et je remplis mes DG par l'utilisation d'un énumérateur sur mes HT :


Hashtable htDocuments = new Hashtable();


DataTable dtDocuments;


DataColumn dcColonne;


DataRow drDocuments;


IEnumerator iEnum;

...
// Remplissage de ma Hashtable
// Création des cellules
...

iEnum = htDocuments.Keys.GetEnumerator();


while(iEnum.MoveNext()){



drDocuments = dtDocuments.NewRow();
...


// ICI JE REMPLIS MES CELLULES
...

dtDocuments.Rows.Add(drDocuments);


}


try{



dsDocuments.Tables.Add(dtDocuments);


FActi_dgDocuments.SetDataBinding(dsDocuments, "Documents");


}catch(Exception ex){Console.WriteLine("Erreur : "+ex.Message);}

Le problème est que l'ordre des clef de mes HT ne correspond pas à l'ordre "logique" (ascendant, alphabétique,...).
Donc l'affichage est désordonné.

Merci.

Y a t-il un moyen de trier un DG sur une colonne donnée ?

4 réponses

cs_Crazyht
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
21 août 2010
8
10 mars 2005 à 00:41
place le tout dans un tableau temporaire que tu remplira grarce a ta HT. Tu pourras le classer sans les contraintes de la HT. Puis bind le tableau sur la DG.

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
3
taoetc
Messages postés
346
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
3 septembre 2007
3
14 mars 2005 à 09:55
Tu affiche ta datatable apparemment, donc, je te dirais bien, trie ta datatable ou fait une view dessus et tu lie cette vue à ta datagrid

Tu dois aussi peut etre pouvoir appeler l'ordre de tri de la datagrid, c à dire simuler le clic sur l'entete de la colonne que tu veux trier
0
Gaxx
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008

14 mars 2005 à 10:33
Justement c'est ce que je voulais faire mais je n'ai pas réussi à trier le datatable ou à simuler un clic sur une colonne.
J'ai utilisé la méthode de Crazyht en utilisant un tableau puis Array.Sort().
0
Gaxx
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008

14 mars 2005 à 10:39
Ah j'oubliais : après avoir le tableau trié je le parcours en partant de la position 0 et à chaque élément j'appelle la valeur correspondante dans ma HT :


System.Data.DataTable dtDocuments;


DataColumn dcColonne;


DataRow drDocuments;


IEnumerator iEnum;


Hashtable htTmpDoc =
new Hashtable();


String[] sTmpDoc;



[...]

sTmpDoc = grouillot.faireListeTriéeClefsHashtable( htTmpDoc );



for(
int i=0; i<sTmpDoc.Length; i++)


{


drDocuments = dtDocuments.NewRow();



try{ drDocuments["Numéro"] = sTmpDoc[i]; }



catch{ drDocuments["Numéro"] = "Erreur";}



try{ drDocuments["Objet"] = ((String[])htTmpDoc[sTmpDoc[i]])[0]; }



catch{ drDocuments["Objet"] = "Erreur";}



try{ drDocuments["Contact"] = ((String[])htTmpDoc[sTmpDoc[i]])[1]; }



catch{ drDocuments["Contact"] = "Erreur";}



try{ drDocuments["Date"] = ((String[])htTmpDoc[sTmpDoc[i]])[2]; }



catch{ drDocuments["Date"] = "Erreur";}


dtDocuments.Rows.Add(drDocuments);


}



try


{


FActi_dgDocuments.BeginInit();


dsDocuments.Tables.Add(dtDocuments);


FActi_dgDocuments.SetDataBinding(dsDocuments, "Documents");


FActi_dgDocuments.EndInit();


}



catch(Exception ex)


{


Console.WriteLine("Erreur affichage table TypesDocument : "+ex.Message);


}
0