Mathieu Kempé
Comment filtrer un DataSet
Cet astuce permet de filtrer de deux manières différentes les tables contenues dans un DataSet.
Par Mathieu Kempé publié le 30/04/2003 à 18:32, lu 16855 fois,
Comment filtrer un DataSetCet astuce permet de filtrer de deux manières différentes les tables contenues dans un DataSetDataSet DataView Filtrer Filter RowFilter SelectMathieu Kempémathieukempe@hotmail.com
Dans un premier exemple on va recrée une nouvelle table qui ne contient que les données filtrées.
Alors que dans le deuxième on crée uniquement une vue avec les données filtrées.
Cet astuce permet de trier dans un DataSet des Tables issues d'un SGBDR ainsi que de filtrer un document XML sans utiliser XPath.
Les données que nous allons utiliser sont stockées dans un document XML de cette forme: <?xml version="1.0" encoding="utf-8" ?> <contacts> <contact name="Mathieu" phone="222222222222" adress="9 rue de Gournod"> <description>The description of the contact</description> </contact> <contact name="Jean" phone="889898989898" adress="67 rue de Bruges"> <description>The description of the contact</description> </contact> <contact name="Mickey" phone="7879878789897" adress="45 rue des Souris"> <description>The description of the contact</description> </contact> <contact name="Mathieu" phone="1111111111111" adress="25 rue de Valjean"> <description>The description of the contact</description> </contact> <contact name="Mathieu" phone="444444444444" adress="37 bbg de dotnet"> <description>The description of the contact</description> </contact> </contacts>
Le code: using System; using System.Data; namespace DSFilter { class Class1 { [STAThread] static void Main(string[] args) { string search="name = 'Mathieu' or name Like '%math%'"; string sort="phone DESC"; DataSet ds = new DataSet(); // on remplit le dataset avec le contenu du document XML ds.ReadXml(@"C:\Data.xml"); //en utilisant la méthode Select de la classe DataTable on récupère les lignes //répondant aux critères. DataRow[] rows = ds.Tables[0].Select(search,sort); // on crée un copie avec le meta donnée de la DataTable qui nous intéresse DataTable resultTable = ds.Tables[0].Clone(); // puis on la remplit avec le tableau de DataRow foreach(DataRow row in rows) resultTable.ImportRow(row); //voila nous avons notre nouveau DataSet avec sa DataTable filtré DisplayData(resultTable); //Dans le cas d'une dataview cela différe puisque là il s'agit uniquement de ne pas //afficher certaines lignes, on ne crée pas de nouvelle DataTable ici. DataView dv = new DataView(); dv.Table = ds.Tables[0]; //on spécifie la prorpiété RowFilter avec la valeur recherchée dv.RowFilter = search; //fixe la manière dont les lignes sont triées dv.Sort = "phone ASC"; DisplayData(dv); } //les 2 méthodes permettant d'afficher dans la console //le contenu de la dataview et la datatable public static void DisplayData(DataView dv) { Console.WriteLine("Affichage de la DataView"); for (int i = 0; i < dv.Count; i++) { for(int j = 0; j < dv.Table.Columns.Count; j++) Console.Write("{0} -", dv[i][j].ToString()); } Console.WriteLine("\n Fini"); } public static void DisplayData(DataTable dt) { Console.WriteLine("Affichage de la nouvelle DataTable"); foreach (DataRow row in dt.Rows) { foreach( DataColumn col in dt.Columns ) { Console.Write("{0}-", row[col]); } Console.Write("\n"); } Console.WriteLine("\n Fini"); } } }
 
» Démarrer une discussion
 
 
Discussion démarée par loussaille le 19/07/2007 à 15:41, 1 commentaire(s).