Dataset et dataview, tables multiples

Signaler
Messages postés
21
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
7 novembre 2005
-
Messages postés
21
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
7 novembre 2005
-
Bonjour à tous,
Je suis en train de développer une appli à partir d'une base de donnée. J'ai créé mon DataSet, qui contient 3 tables (les Ô combien classiques client/commande et véhicule). Maintenant, je veux pouvoir afficher les commandes dans un DataGrid. Seulement mon dataGrid doit pouvoir afficher les détails de la commande, ainsi que ceux du client : en deux mots, je veux que la liasons soit visible dans un tableau. Apparemment le dataView permet de faire cela, mais impossible de comprendre son fonctionnement avec le msdn. Quelqu'un aurai-t-il une solution pour obtenir les relation dans une DataView?
Merci d'avance

5 réponses

Messages postés
87
Date d'inscription
lundi 22 avril 2002
Statut
Membre
Dernière intervention
12 octobre 2006

comment veux-tu que ça s'affiche?



sinon :

DataTable dt = tondataset.Tables["nomtable"];

DataView dv = dt.DefaultView;

tadatagrid.DataSource = dv;

tadatagrid.DataBind();



Voilà



Aurélie
Messages postés
21
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
7 novembre 2005

Je n'aurai pas poster pour une solution aussi simple ;-)

En gros j'ai une table commande, avec quelques détails (nom, id, qté, date).
et j'ai une table client (nom, adresse, id etc.)
Je fais un lien entre la table client et la table commande, pour que chaque commande soit attachée à un client! (c'est l'exemple typique d'une base de données).

ce que je veux pouvoir faire, c'est afficher dans une DataGrid toute les "commandes". Si j'affiche la table "commande", j'aurai tous les détails, plus un numéro qui est l'ID du client (le champs de la liaison, classique). Moi je veux afficher à la place de l'ID client, tous les champs qui définnissent un client (son nom, adresse etc...).

résumer : je veux afficher dans mon DataGrid des données provenant de "Commande" ET de "client", en fonction de la relation.

Sous Access, il existe les tables et les requetes. Dans les tables sont stockées les données, et les requetes permettent de "croiser" les tables.

Si une telle fonctionnalité n'existe pas, alors les DataSet sont la plus grosse arnaque de toute l'histoire de la programation...
Messages postés
87
Date d'inscription
lundi 22 avril 2002
Statut
Membre
Dernière intervention
12 octobre 2006

ta requête = "select * from commande,client where commande.idclient=client.idclient"

tu as donc créer ton dataset à partir de ça + la table vehicule?



pour afficher le résultat de ton ds dans la DataGrid :

en aspx :



<Columns>





<et ainsi de suite pour les autres champs>

</Columns>



dans ton code :

2 solutions :

soit :DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn("NumCde",typeof(System.String)));

dt.Columns.Add(new DataColumn("NomClt",typeof(System.String)));

DataRow dr;

foreach(DataRow drs in ds.Tables["NomTable"].Rows){

dr = dt.NewRow();

dr[0] = drs["NumCommande"].ToString();

dr[1] = drs["NomClt"].ToString();

dt.Rows.Add(dr);

}

DataView dv = new DataView(dt);

TaDataGrid.DataSource = dv;

TaDataGrid.DataBind();



soit :

au lieu de "*" dans la req. tu as mis tes champs qui doivent être
identiques à ce que tu as dans la propriété DataField de chaque colonne
de ta datagrid et là tu peux faire

tadatagrid.DataSource = ds; (je crois);

tadatagrid.DataBind();





après si c'est pas ça que tu veux, et bien t'es pas clair!
Aurélie
Messages postés
21
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
7 novembre 2005

Je viens de continuer un peu mes recherches...

J'ai l'impression que je me trompe sur les dataGrids : apparemment ils ne servent qu'à visualiser une table (et éventuellement une dataview qui filtre certains enregistrements).

Maintenant arrétez moi si je me plante (et inversement dites moi si j'ai raison) :
- afin d'afficher une requete, il faut utiliser une ListView, avec plusieurs collones (si vous avez des liens sur des tutos, je suis preneur)
- est-il possible de faire des "Drag'n'Drop" entre 2 ListView, de 2 fenetres MDI filles?
- est-il possible de faire un "look'n'feel" personalisé sur les ListView, a savoir les entetes des collones, avec tri auto si on clike dessus (classique), possibilité d'afficher une ligne dans une couleur particulière en fonction d'un param (ex, en fonction de la date)?

voila, je suis preneur si vous avez des liens intéressants, et je les mettrais si j'en trouve des bien...
Messages postés
21
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
7 novembre 2005

en réponse à Aurélie :
Tu as raison, je pense que je ne suis pas assez clair. J'ai déja créé un DataSet typé contenant les trois tables sus-citées. J'ai besoin de 3 tables distinctes.
Ce que j'aurai aprécié, dans l'idéal, serai de pouvoir créer une DataView fortement pérsonalisée, exactement de la même manière que sous Access (je ne sais pas si tu connais, mais les outils graphiques permettent de faire aisément des relations, qui vont automatiquement lier les infos dans les requètes). Une requète sous Access est composée en gros de 2 parties : une partie Tables, et une partie champs. Dans la partie table, tu ajoutes les table dont tu vas avoir besoin. Les relations entre certains champs apparaissent automatiquement. Ensuite, la partie du bas est un tableau avec des combosBoxs. Elles permettent de choisir la table, puis le champs de cette table pour chaque collone. On peut appliquer des filtres a chaque collone, et au lieu d'afficher un champs d'une table, on peut afficher une "formule", calculée à partir des autres champs...

Ce n'est peut-etre toujours pas tres clair, mais ce qu'il faut comprendre c'est que ma requète n'est pas éffectuée sur la source de données, mais sur mon DataSet, une foi toutes les données chargées. Il est impératif que je charge 3 tables distinctes, pour éviter la redondance, et pour pouvoir faire un traitement particulier pour les clients...