begin process at 2008 08 08 21:46:29
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : relation [ Base de données / ADO.NET ] (laurent180)

relation le 05/02/2008 15:44:40

laurent180
Bonjour,

J'aimerai savoir si qq a un exemple. Je n'arrive pas a afficher une relation de table.
j'ai ma 1 table "client" et ma 2 table "facture"
et j'aimerai lorsque je selectionne un client avoir directement la liste des factures qui si rapporte.
je travail en mode deconnecté.
j'arrive a affiché le client mais pas les facture.
Si qq a un exemple je suis preneur.

Merci de votre aide.

laurent.

Re : relation le 07/02/2008 15:20:31

imothepe_33
Si tu boss en mode déconnecté cela veut dire que tu utilise un Dataset. - Tout d'abord as tu établi la relation (client-facture) dans ton Dataset? - Si oui tu devrais pouvoir récupérer les factures "enfants" de ton client "parent" avec la fonction GetChild() (je ne suis pas très sûre de la syntaxe) dans une liste... Avec un Dataset fortement typé c'est encore plus simple. Pour plus de détailles fais un tour sur developpez.com dans la section dotNet et fais une recherche sur les tutoriels en rapport avec ADO. Net et C#. Simplement si tu as MSDN fais une recherche.

Re : relation le 07/02/2008 21:36:36

bidou_01
Hello,

Tu peux aussi utiliser les DataRelations à la mano, entre tes DataTables ;)

Cordialement,

Bidou_01
 


[ Lien ]

Re : relation le 08/02/2008 09:57:25

laurent180

Bonjour a tous,

Merci de votre aide.
Je travail bien avec un dataset et je fait bien une datarelation entre les datatables.

Mais j'aimerai lorsque j'affiche un client que j'ai en dessous toutes la factures qui s'y rapporte dans un datagriedview.
Mais le datagridview il m'affiche toute la table "facture" et pas juste les factures du clients selectionné.

Merci de votre aide
Lau.


Re : relation le 08/02/2008 10:59:48

bidou_01
Hello,

L'erreur classique c'est de crée les relations, mais d'oublier de les ajouter au DataSet :

monDS.Relations.Add(madataRelation);

Sinon, comme ça je vois pas d'ou peut venir l'erreur, à priori les DataRelation devraient suffire...

Sinon tu as la solution de "facilité" en utilisant les BindingSource.

Ou alors binder ton deuxième DataGridView à une DataView ou tu changerais le RowFilter "à la mano" à chaque changement de client dans ton premier gridView :) (mais bof)

Cordialement,

Bidou_01
 


[ Lien ]

Re : relation le 08/02/2008 13:36:57

laurent180
Bonjour,

et encore merci de votre aide.
Voila le code (en vb.net) je n'ai pas mon code en C# ici mais c le meme problème.

'definir 2 colonne pour mettre les 2 table en relation

Dim dccleprimaire As DataColumn

Dim dccleexterne As DataColumn

Dim dr As DataRelation

dccleprimaire = ObjetDataSet.Tables(

"client").Columns("id_nom")

dccleexterne = ObjetDataSet.Tables(

"facture").Columns("id_nom")

'etablir la relation

dr =

New DataRelation("dr1", dccleprimaire, dccleexterne)

'associer la relation au dataset

ObjetDataSet.Relations.Add(dr)

 

DataGridView1.DataSource = objetdataset

DataGridView1.DataMember = "facture"

Re : relation le 08/02/2008 19:34:53

bidou_01
Hello,

aahhhhhhhhhh ! Après réfléxion et tests, j'ai trouvé ton erreur ;)

==> DataGridView1.DataMember = "facture"  //Faux !!

==> DataGridView1.DataMember = "client.dr1";

A priori ça devrait marcher.

Un petit exemple pour bien comprendre : j'utilise la base de données Northwind et je crée 2 relations :

==> entre Customers et Orders
==> entre Orders et OrderDetails

===========================================================================

//on cr,e notre factory et notre connexion

this.m_factory = DbProviderFactories.GetFactory("System.Data.SqlClient");

this.m_connection = this.m_factory.CreateConnection();

this.m_connection.ConnectionString = this.m_connectionString;

//instanciation du DataSet

this.m_ds = newDataSet("RelationCustOrders");

//cr,ation et param,trage du dataAdapter charg, de lister les clients

this.m_daCustomers = this.m_factory.CreateDataAdapter();

this.m_daCustomers.SelectCommand = this.m_factory.CreateCommand();

this.m_daCustomers.SelectCommand.CommandText = "SELECT * FROM Customers";

this.m_daCustomers.SelectCommand.Connection = this.m_connection;

this.m_daCustomers.TableMappings.Add("Table", "Customers");

this.m_daCustomers.Fill(this.m_ds);

//cr,ation et param,trage du dataAdapter charg, de lister les achats

this.m_daOrders = this.m_factory.CreateDataAdapter();

this.m_daOrders.SelectCommand = this.m_factory.CreateCommand();

this.m_daOrders.SelectCommand.CommandText = "SELECT * FROM Orders";

this.m_daOrders.SelectCommand.Connection = this.m_connection;

this.m_daOrders.TableMappings.Add("Table", "Orders");

this.m_daOrders.Fill(this.m_ds);

//cr,ation et param,trage du dataAdapter charg, de lister le d,tail des achats

this.m_daDetailsOrders = this.m_factory.CreateDataAdapter();

this.m_daDetailsOrders.SelectCommand = this.m_factory.CreateCommand();

this.m_daDetailsOrders.SelectCommand.CommandText = "SELECT * FROM [Order Details]";

this.m_daDetailsOrders.SelectCommand.Connection = this.m_connection;

this.m_daDetailsOrders.TableMappings.Add("Table", "OrderDetails");

this.m_daDetailsOrders.Fill(this.m_ds);

//on cr,e la relation entre les tables Orders et Customers

DataRelation l_relCustOrder;

DataColumn l_colMasterCust;

DataColumn l_colDetailCust;

l_colMasterCust =

this.m_ds.Tables["Customers"].Columns["CustomerID"];

l_colDetailCust =

this.m_ds.Tables["Orders"].Columns["CustomerID"];

l_relCustOrder =

newDataRelation("FK_Order_Reference_Customer", l_colMasterCust, l_colDetailCust);

this.m_ds.Relations.Add(l_relCustOrder);//ajout de la relation au dataset

//on cr,e la relation entre les tables Orders et Order Details

DataRelation l_relOrderDetail;

DataColumn l_colMasterOrder;

DataColumn l_colDetailOrder;

l_colMasterOrder =

this.m_ds.Tables["Orders"].Columns["OrderID"];

l_colDetailOrder =

this.m_ds.Tables["OrderDetails"].Columns["OrderID"];

l_relOrderDetail =

newDataRelation("FK_OrderDetail_Reference_Order", l_colMasterOrder, l_colDetailOrder);

this.m_ds.Relations.Add(l_relOrderDetail);//ajout de la relation au dataset

//binding du dataGrid affichant les clients au dataset

dataGridView_customers.DataSource =

this.m_ds;

dataGridView_customers.DataMember =

"Customers";

//binding du dataGrid affichant les achats au dataset

dataGridView_orders.DataSource =

this.m_ds;

dataGridView_orders.DataMember =

"Customers.FK_Order_Reference_Customer";

//binding du dataGrid affichant le d,tail des achats au dataset

dataGridView_detailsOrders.DataSource =

this.m_ds;

dataGridView_detailsOrders.DataMember =

"Customers.FK_Order_Reference_Customer.FK_OrderDetail_Reference_Order";

=============================================================================

Désolé pour le bout de code un peu long :)

Cordialement,

Bidou_01
 


[ Lien ]

Re : relation le 09/02/2008 14:59:46

laurent180
Bonjour,

encore merci pour ton exemple.
je vais l'essayé.
je te tiens au courant.

merci
laurent180

Re : relation le 11/02/2008 10:56:54

imothepe_33
Avec cet exemple je pense que tu pourras t'en sortir...

Re : relation le 11/02/2008 12:35:19

imothepe_33
Vu que tu as déjà tes relations, tu peux aussi utiliser la fonction GetChildRows pour récupérer les enregistrements enfants : dr = New DataRelation("dr1", dccleprimaire, dccleexterne) 'associer la relation au dataset ObjetDataSet.Relations.Add(dr) //Je vais y aller en C# DataRow rowClient = ObjetDataSet.Tables["client"].Find("IdDuClient"); //une fois la ligne maître récupérée, tu fais DataRow[] rowsFacture = rowClient.GetChildRows(dr); //ton objet rowsFacture contient maintenant les facures associées à rowClient. Pour plus de détails suit ce lien http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconnavigatingrelationshipbetweentwotables.asp


[Page 1 Page 2]
Classé sous : arrive, table, client, exemple, relation

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS