Bonjour
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
merci
Bonjour
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
merci
Bonjour
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
merci
"Philippe" wrote in message
news:Bonjour
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
merci
Regarder la Class DataView qui permet de créer une vue sur un DataSet.
Cette Vue ne contiendra que les données pertinentes au ID sélectionné.
"Philippe" <philippeNO.cazaux-moutouSPAM@NOsflx.SPAMcom> wrote in message
news:Omqogj5BFHA.3368@TK2MSFTNGP10.phx.gbl...
Bonjour
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
merci
Regarder la Class DataView qui permet de créer une vue sur un DataSet.
Cette Vue ne contiendra que les données pertinentes au ID sélectionné.
"Philippe" wrote in message
news:Bonjour
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
merci
Regarder la Class DataView qui permet de créer une vue sur un DataSet.
Cette Vue ne contiendra que les données pertinentes au ID sélectionné.
> j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
> j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
> j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
enregistrement que je veux, connaisant son ID ??
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur
l enregistrement que je veux, connaisant son ID ??
C'est marrant comme cette question revient souvent ; et je l'ai aussi
posée plusieurs fois. Et j'ai galéré pour trouver une méthode simple,
car le vrai problème avec .NET c'est le foisonnement de méthodes
disponibles !
je suppose que tu a deux Forms : 1. FormTable 2.FormFiche
et tu veux reproduire le classique "ouvre(FormFiche,'ID')" en se
positionnant sur l'enregistrement courant de la Formtable.
Fais ceci :
1. Dans FormTable tu mets ce code par exemple dans un événement-clic
BindingManagerBase bm;
bm = this.BindingContext[dataSet1, "TaDataTable"];
FormFiche fm = new FormFiche(bm.Position);
fm.Show();
2. Dans FormFiche
2.1 dans tes déclarations : private int ligneEnCours=0;
2.2 tu surcharges ensuite le constructeur de FormFiche
public FormFiche(int pos)
{
InitializeComponent();
ligneEnCours = pos;
}
2.3 dans l'événement load de ta form ou dans un bouton
this.BindingContext[dataSet1, "TaDataTable"].Position
=ligneEnCours;
Bien sûr j'ai supposé naivement que les deux forms pointent le même
DataSet et la même Datatable, sinon tu adaptes. C'est la forme canonique
et tu n'as pas besoin de connaitre l'ID !
L'autre façon est de passer par un DataView.
En espérant t'avoir aidé.
digging :oÞ
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur
l enregistrement que je veux, connaisant son ID ??
C'est marrant comme cette question revient souvent ; et je l'ai aussi
posée plusieurs fois. Et j'ai galéré pour trouver une méthode simple,
car le vrai problème avec .NET c'est le foisonnement de méthodes
disponibles !
je suppose que tu a deux Forms : 1. FormTable 2.FormFiche
et tu veux reproduire le classique "ouvre(FormFiche,'ID')" en se
positionnant sur l'enregistrement courant de la Formtable.
Fais ceci :
1. Dans FormTable tu mets ce code par exemple dans un événement-clic
BindingManagerBase bm;
bm = this.BindingContext[dataSet1, "TaDataTable"];
FormFiche fm = new FormFiche(bm.Position);
fm.Show();
2. Dans FormFiche
2.1 dans tes déclarations : private int ligneEnCours=0;
2.2 tu surcharges ensuite le constructeur de FormFiche
public FormFiche(int pos)
{
InitializeComponent();
ligneEnCours = pos;
}
2.3 dans l'événement load de ta form ou dans un bouton
this.BindingContext[dataSet1, "TaDataTable"].Position
=ligneEnCours;
Bien sûr j'ai supposé naivement que les deux forms pointent le même
DataSet et la même Datatable, sinon tu adaptes. C'est la forme canonique
et tu n'as pas besoin de connaitre l'ID !
L'autre façon est de passer par un DataView.
En espérant t'avoir aidé.
digging :oÞ
j ai une table avec la colonne ID comme clef primaire
quand j ouvre ma fenetre detail, comment faire pour se positionner sur
l enregistrement que je veux, connaisant son ID ??
C'est marrant comme cette question revient souvent ; et je l'ai aussi
posée plusieurs fois. Et j'ai galéré pour trouver une méthode simple,
car le vrai problème avec .NET c'est le foisonnement de méthodes
disponibles !
je suppose que tu a deux Forms : 1. FormTable 2.FormFiche
et tu veux reproduire le classique "ouvre(FormFiche,'ID')" en se
positionnant sur l'enregistrement courant de la Formtable.
Fais ceci :
1. Dans FormTable tu mets ce code par exemple dans un événement-clic
BindingManagerBase bm;
bm = this.BindingContext[dataSet1, "TaDataTable"];
FormFiche fm = new FormFiche(bm.Position);
fm.Show();
2. Dans FormFiche
2.1 dans tes déclarations : private int ligneEnCours=0;
2.2 tu surcharges ensuite le constructeur de FormFiche
public FormFiche(int pos)
{
InitializeComponent();
ligneEnCours = pos;
}
2.3 dans l'événement load de ta form ou dans un bouton
this.BindingContext[dataSet1, "TaDataTable"].Position
=ligneEnCours;
Bien sûr j'ai supposé naivement que les deux forms pointent le même
DataSet et la même Datatable, sinon tu adaptes. C'est la forme canonique
et tu n'as pas besoin de connaitre l'ID !
L'autre façon est de passer par un DataView.
En espérant t'avoir aidé.
digging :oÞ
Merci de ton aide
mais je venais de trouver une solution
// Ici on se positionne sur la ligne choisie dans la liste
objdsAdherents.Adherents.DefaultView.Sort="ID";
this.BindingContext[objdsAdherents,"Adherents"].Position =
objdsAdherents.Adherents.DefaultView.Find(FMain.iPositionListe);
en fait mes 2 forms n ont pas le meme dataset, car je t avoue que je ne sais
pas comment faire pour n avoir qu un seul dataset partagé ce qui serait le
plus simples
Peux t on comme avec delphi avoir une fiche que pour les datasets ??
donc j ai une form Main, qui appelle et dock mes 2 forms dans un panel, dans
ma main j ai declaré une variable globale que j affecte quand le change de
ligne depuis la liste
puisje t envoyer mon petit (il est vraiement petit ) prog pour que tu me
dises si mes methodes sont bien, car je debutes en c# et c est galere de chez
galere
Merci de ton aide
mais je venais de trouver une solution
// Ici on se positionne sur la ligne choisie dans la liste
objdsAdherents.Adherents.DefaultView.Sort="ID";
this.BindingContext[objdsAdherents,"Adherents"].Position =
objdsAdherents.Adherents.DefaultView.Find(FMain.iPositionListe);
en fait mes 2 forms n ont pas le meme dataset, car je t avoue que je ne sais
pas comment faire pour n avoir qu un seul dataset partagé ce qui serait le
plus simples
Peux t on comme avec delphi avoir une fiche que pour les datasets ??
donc j ai une form Main, qui appelle et dock mes 2 forms dans un panel, dans
ma main j ai declaré une variable globale que j affecte quand le change de
ligne depuis la liste
puisje t envoyer mon petit (il est vraiement petit ) prog pour que tu me
dises si mes methodes sont bien, car je debutes en c# et c est galere de chez
galere
Merci de ton aide
mais je venais de trouver une solution
// Ici on se positionne sur la ligne choisie dans la liste
objdsAdherents.Adherents.DefaultView.Sort="ID";
this.BindingContext[objdsAdherents,"Adherents"].Position =
objdsAdherents.Adherents.DefaultView.Find(FMain.iPositionListe);
en fait mes 2 forms n ont pas le meme dataset, car je t avoue que je ne sais
pas comment faire pour n avoir qu un seul dataset partagé ce qui serait le
plus simples
Peux t on comme avec delphi avoir une fiche que pour les datasets ??
donc j ai une form Main, qui appelle et dock mes 2 forms dans un panel, dans
ma main j ai declaré une variable globale que j affecte quand le change de
ligne depuis la liste
puisje t envoyer mon petit (il est vraiement petit ) prog pour que tu me
dises si mes methodes sont bien, car je debutes en c# et c est galere de chez
galere
Je fais ca, et ca marche
objdsAdherents.Adherents.DefaultView.Sort="ID";
this.BindingContext[objdsAdherents,"Adherents"].Position > objdsAdherents.Adherents.DefaultView.Find(FMain.iPositionListe);
est ce la bonne méthode ?
merci
Paul Bacelar a écrit :
> "Philippe" wrote in
> news:
>
>>Bonjour
>>
>>j ai une table avec la colonne ID comme clef primaire
>>
>>quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
>>enregistrement que je veux, connaisant son ID ??
>>
>>merci
>
>
> Regarder la Class DataView qui permet de créer une vue sur un DataSet.
>
> Cette Vue ne contiendra que les données pertinentes au ID sélectionné.
>
>
Je fais ca, et ca marche
objdsAdherents.Adherents.DefaultView.Sort="ID";
this.BindingContext[objdsAdherents,"Adherents"].Position > objdsAdherents.Adherents.DefaultView.Find(FMain.iPositionListe);
est ce la bonne méthode ?
merci
Paul Bacelar a écrit :
> "Philippe" <philippeNO.cazaux-moutouSPAM@NOsflx.SPAMcom> wrote in
> news:Omqogj5BFHA.3368@TK2MSFTNGP10.phx.gbl...
>
>>Bonjour
>>
>>j ai une table avec la colonne ID comme clef primaire
>>
>>quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
>>enregistrement que je veux, connaisant son ID ??
>>
>>merci
>
>
> Regarder la Class DataView qui permet de créer une vue sur un DataSet.
>
> Cette Vue ne contiendra que les données pertinentes au ID sélectionné.
>
>
Je fais ca, et ca marche
objdsAdherents.Adherents.DefaultView.Sort="ID";
this.BindingContext[objdsAdherents,"Adherents"].Position > objdsAdherents.Adherents.DefaultView.Find(FMain.iPositionListe);
est ce la bonne méthode ?
merci
Paul Bacelar a écrit :
> "Philippe" wrote in
> news:
>
>>Bonjour
>>
>>j ai une table avec la colonne ID comme clef primaire
>>
>>quand j ouvre ma fenetre detail, comment faire pour se positionner sur l
>>enregistrement que je veux, connaisant son ID ??
>>
>>merci
>
>
> Regarder la Class DataView qui permet de créer une vue sur un DataSet.
>
> Cette Vue ne contiendra que les données pertinentes au ID sélectionné.
>
>
Voici un exemple complet utilisant un dataSet typé
Il y 2 fichiers.
Le premier est un xsd qui definie un DataSet typé. Vous n'avez qu'a demander
la création d'un nouveau DataSet de nom "Dataset1" dans votre projet et
faire un copier-coller de ce qui suit dans la vue XML du DataSet (en bas à
gauche du Designer de DataSet).
< FICHIER Dataset1.xsd>
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="Dataset1" targetNamespace="http://tempuri.org/Dataset1.xsd"
elementFormDefault="qualified"
attributeFormDefault="qualified" xmlns="http://tempuri.org/Dataset1.xsd"
xmlns:mstns="http://tempuri.org/Dataset1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Dataset1" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Adherents">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:integer" minOccurs="0" />
<xs:element name="Nom" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ObjetsLies">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:ID" minOccurs="0" />
<xs:element name="Propriétaire" type="xs:integer" minOccurs="0" />
<xs:element name="Desc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="Dataset1Key1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Adherents" />
<xs:field xpath="mstns:ID" />
</xs:key>
<xs:key name="Dataset1Key2" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:ObjetsLies" />
<xs:field xpath="mstns:ID" />
</xs:key>
<xs:keyref name="AdherentsObjetsLies" refer="Dataset1Key1">
<xs:selector xpath=".//mstns:ObjetsLies" />
<xs:field xpath="mstns:Propriétaire" />
</xs:keyref>
</xs:element>
</xs:schema>
< /FICHIER Dataset1.xsd>
Le second fichier creer un formulaire avec 2 grilles en mode Master/Detail.
La première grille permet de remplir le DataSet.
Ne mettez que des nombres dans les colonnes ID.
Ne doubleclicker pas dans la grille en haut en étant en mode détail.
En mode Master sur la grille supérieur, si vous doubleclickez sur une ligne
non vide, le formulaire du bas affichera les détails correspondants.
<CODE IMPORTANT>
private void dataGrid1_Click(object sender, System.EventArgs e)
{
System.Data.DataView MyView = new
System.Data.DataView(dataset11.ObjetsLies);
MyView.RowFilter = "Propriétaire = " +
dataGrid1[dataGrid1.CurrentRowIndex,0].ToString();
dataGrid2.SetDataBinding(MyView, "");
}
</CODE IMPORTANT>
<FICHIER Form1.cs>
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication1
{
/// <summary>
/// Description résumée de Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private WindowsApplication1.Dataset1 dataset11;
private System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.DataGrid dataGrid2;
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();
//
// TODO : ajoutez le code du constructeur après l'appel à
InitializeComponent
//
}
/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.dataset11 = new WindowsApplication1.Dataset1();
this.dataGrid1 = new System.Windows.Forms.DataGrid();
this.dataGrid2 = new System.Windows.Forms.DataGrid();
((System.ComponentModel.ISupportInitialize)(this.dataset11)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid2)).BeginInit();
this.SuspendLayout();
//
// dataset11
//
this.dataset11.DataSetName = "Dataset1";
this.dataset11.Locale = new System.Globalization.CultureInfo("en-US");
//
// dataGrid1
//
this.dataGrid1.DataMember = "Adherents";
this.dataGrid1.DataSource = this.dataset11;
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(64, 16);
this.dataGrid1.Name = "dataGrid1";
this.dataGrid1.Size = new System.Drawing.Size(424, 136);
this.dataGrid1.TabIndex = 0;
this.dataGrid1.DoubleClick += new System.EventHandler(this.dataGrid1_Click);
//
// dataGrid2
//
this.dataGrid2.DataMember = "ObjetsLies";
this.dataGrid2.DataSource = this.dataset11;
this.dataGrid2.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid2.Location = new System.Drawing.Point(64, 232);
this.dataGrid2.Name = "dataGrid2";
this.dataGrid2.Size = new System.Drawing.Size(424, 136);
this.dataGrid2.TabIndex = 1;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(608, 396);
this.Controls.Add(this.dataGrid2);
this.Controls.Add(this.dataGrid1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.dataset11)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid2)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void dataGrid1_Click(object sender, System.EventArgs e)
{
System.Data.DataView MyView = new
System.Data.DataView(dataset11.ObjetsLies);
MyView.RowFilter = "Propriétaire = " +
dataGrid1[dataGrid1.CurrentRowIndex,0].ToString();
dataGrid2.SetDataBinding(MyView, "");
}
}
}
</FICHIER Form1.cs>
Voici un exemple complet utilisant un dataSet typé
Il y 2 fichiers.
Le premier est un xsd qui definie un DataSet typé. Vous n'avez qu'a demander
la création d'un nouveau DataSet de nom "Dataset1" dans votre projet et
faire un copier-coller de ce qui suit dans la vue XML du DataSet (en bas à
gauche du Designer de DataSet).
< FICHIER Dataset1.xsd>
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="Dataset1" targetNamespace="http://tempuri.org/Dataset1.xsd"
elementFormDefault="qualified"
attributeFormDefault="qualified" xmlns="http://tempuri.org/Dataset1.xsd"
xmlns:mstns="http://tempuri.org/Dataset1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Dataset1" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Adherents">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:integer" minOccurs="0" />
<xs:element name="Nom" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ObjetsLies">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:ID" minOccurs="0" />
<xs:element name="Propriétaire" type="xs:integer" minOccurs="0" />
<xs:element name="Desc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="Dataset1Key1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Adherents" />
<xs:field xpath="mstns:ID" />
</xs:key>
<xs:key name="Dataset1Key2" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:ObjetsLies" />
<xs:field xpath="mstns:ID" />
</xs:key>
<xs:keyref name="AdherentsObjetsLies" refer="Dataset1Key1">
<xs:selector xpath=".//mstns:ObjetsLies" />
<xs:field xpath="mstns:Propriétaire" />
</xs:keyref>
</xs:element>
</xs:schema>
< /FICHIER Dataset1.xsd>
Le second fichier creer un formulaire avec 2 grilles en mode Master/Detail.
La première grille permet de remplir le DataSet.
Ne mettez que des nombres dans les colonnes ID.
Ne doubleclicker pas dans la grille en haut en étant en mode détail.
En mode Master sur la grille supérieur, si vous doubleclickez sur une ligne
non vide, le formulaire du bas affichera les détails correspondants.
<CODE IMPORTANT>
private void dataGrid1_Click(object sender, System.EventArgs e)
{
System.Data.DataView MyView = new
System.Data.DataView(dataset11.ObjetsLies);
MyView.RowFilter = "Propriétaire = " +
dataGrid1[dataGrid1.CurrentRowIndex,0].ToString();
dataGrid2.SetDataBinding(MyView, "");
}
</CODE IMPORTANT>
<FICHIER Form1.cs>
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication1
{
/// <summary>
/// Description résumée de Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private WindowsApplication1.Dataset1 dataset11;
private System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.DataGrid dataGrid2;
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();
//
// TODO : ajoutez le code du constructeur après l'appel à
InitializeComponent
//
}
/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.dataset11 = new WindowsApplication1.Dataset1();
this.dataGrid1 = new System.Windows.Forms.DataGrid();
this.dataGrid2 = new System.Windows.Forms.DataGrid();
((System.ComponentModel.ISupportInitialize)(this.dataset11)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid2)).BeginInit();
this.SuspendLayout();
//
// dataset11
//
this.dataset11.DataSetName = "Dataset1";
this.dataset11.Locale = new System.Globalization.CultureInfo("en-US");
//
// dataGrid1
//
this.dataGrid1.DataMember = "Adherents";
this.dataGrid1.DataSource = this.dataset11;
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(64, 16);
this.dataGrid1.Name = "dataGrid1";
this.dataGrid1.Size = new System.Drawing.Size(424, 136);
this.dataGrid1.TabIndex = 0;
this.dataGrid1.DoubleClick += new System.EventHandler(this.dataGrid1_Click);
//
// dataGrid2
//
this.dataGrid2.DataMember = "ObjetsLies";
this.dataGrid2.DataSource = this.dataset11;
this.dataGrid2.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid2.Location = new System.Drawing.Point(64, 232);
this.dataGrid2.Name = "dataGrid2";
this.dataGrid2.Size = new System.Drawing.Size(424, 136);
this.dataGrid2.TabIndex = 1;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(608, 396);
this.Controls.Add(this.dataGrid2);
this.Controls.Add(this.dataGrid1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.dataset11)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid2)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void dataGrid1_Click(object sender, System.EventArgs e)
{
System.Data.DataView MyView = new
System.Data.DataView(dataset11.ObjetsLies);
MyView.RowFilter = "Propriétaire = " +
dataGrid1[dataGrid1.CurrentRowIndex,0].ToString();
dataGrid2.SetDataBinding(MyView, "");
}
}
}
</FICHIER Form1.cs>
Voici un exemple complet utilisant un dataSet typé
Il y 2 fichiers.
Le premier est un xsd qui definie un DataSet typé. Vous n'avez qu'a demander
la création d'un nouveau DataSet de nom "Dataset1" dans votre projet et
faire un copier-coller de ce qui suit dans la vue XML du DataSet (en bas à
gauche du Designer de DataSet).
< FICHIER Dataset1.xsd>
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="Dataset1" targetNamespace="http://tempuri.org/Dataset1.xsd"
elementFormDefault="qualified"
attributeFormDefault="qualified" xmlns="http://tempuri.org/Dataset1.xsd"
xmlns:mstns="http://tempuri.org/Dataset1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Dataset1" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Adherents">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:integer" minOccurs="0" />
<xs:element name="Nom" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ObjetsLies">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:ID" minOccurs="0" />
<xs:element name="Propriétaire" type="xs:integer" minOccurs="0" />
<xs:element name="Desc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="Dataset1Key1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Adherents" />
<xs:field xpath="mstns:ID" />
</xs:key>
<xs:key name="Dataset1Key2" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:ObjetsLies" />
<xs:field xpath="mstns:ID" />
</xs:key>
<xs:keyref name="AdherentsObjetsLies" refer="Dataset1Key1">
<xs:selector xpath=".//mstns:ObjetsLies" />
<xs:field xpath="mstns:Propriétaire" />
</xs:keyref>
</xs:element>
</xs:schema>
< /FICHIER Dataset1.xsd>
Le second fichier creer un formulaire avec 2 grilles en mode Master/Detail.
La première grille permet de remplir le DataSet.
Ne mettez que des nombres dans les colonnes ID.
Ne doubleclicker pas dans la grille en haut en étant en mode détail.
En mode Master sur la grille supérieur, si vous doubleclickez sur une ligne
non vide, le formulaire du bas affichera les détails correspondants.
<CODE IMPORTANT>
private void dataGrid1_Click(object sender, System.EventArgs e)
{
System.Data.DataView MyView = new
System.Data.DataView(dataset11.ObjetsLies);
MyView.RowFilter = "Propriétaire = " +
dataGrid1[dataGrid1.CurrentRowIndex,0].ToString();
dataGrid2.SetDataBinding(MyView, "");
}
</CODE IMPORTANT>
<FICHIER Form1.cs>
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication1
{
/// <summary>
/// Description résumée de Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private WindowsApplication1.Dataset1 dataset11;
private System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.DataGrid dataGrid2;
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();
//
// TODO : ajoutez le code du constructeur après l'appel à
InitializeComponent
//
}
/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.dataset11 = new WindowsApplication1.Dataset1();
this.dataGrid1 = new System.Windows.Forms.DataGrid();
this.dataGrid2 = new System.Windows.Forms.DataGrid();
((System.ComponentModel.ISupportInitialize)(this.dataset11)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid2)).BeginInit();
this.SuspendLayout();
//
// dataset11
//
this.dataset11.DataSetName = "Dataset1";
this.dataset11.Locale = new System.Globalization.CultureInfo("en-US");
//
// dataGrid1
//
this.dataGrid1.DataMember = "Adherents";
this.dataGrid1.DataSource = this.dataset11;
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(64, 16);
this.dataGrid1.Name = "dataGrid1";
this.dataGrid1.Size = new System.Drawing.Size(424, 136);
this.dataGrid1.TabIndex = 0;
this.dataGrid1.DoubleClick += new System.EventHandler(this.dataGrid1_Click);
//
// dataGrid2
//
this.dataGrid2.DataMember = "ObjetsLies";
this.dataGrid2.DataSource = this.dataset11;
this.dataGrid2.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid2.Location = new System.Drawing.Point(64, 232);
this.dataGrid2.Name = "dataGrid2";
this.dataGrid2.Size = new System.Drawing.Size(424, 136);
this.dataGrid2.TabIndex = 1;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(608, 396);
this.Controls.Add(this.dataGrid2);
this.Controls.Add(this.dataGrid1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.dataset11)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGrid2)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void dataGrid1_Click(object sender, System.EventArgs e)
{
System.Data.DataView MyView = new
System.Data.DataView(dataset11.ObjetsLies);
MyView.RowFilter = "Propriétaire = " +
dataGrid1[dataGrid1.CurrentRowIndex,0].ToString();
dataGrid2.SetDataBinding(MyView, "");
}
}
}
</FICHIER Form1.cs>