IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[c#] Databindings


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut [c#] Databindings
    Slt. J'ai une table affichée dans un datagrid. Je veux lorsque je click sur MODIFIER dans un menu, j'ai une petite fenetre contenant 2 textbox qui elles même contiennent les valeurs NOM et PRENOM de la table.
    Je dois donc les "databindé"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		public DialogResult ShowDialog(object source, string datamember, CurrencyManager Curseur )
    		{
    			this.CurseurEquipes=Curseur;//---On écrase le CurrencyManager avec celui de la fen principale---//
     
    			this.tbNom.DataBindings.Add("Text",source,datamember+".Nom");//---On binde le tbNom---//
    			this.tbAge.DataBindings.Add("Text",source,datamember+".Categorie_Age");//---On binde le tbAge---//
     
     
    			return ShowDialog(); //---On affiche la fenetre---//            
    		}
    Ceci est le code de la fenetre appellée à partir de la fenetre principale.
    Je n'ai pas de plantage, mais mes deux textbox restent bloqués sur le premier enregistrement, donc mon databindings ne fonctionne pas correctement...
    Pq ?

    Le code qui appelle la fenetre modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private void MonMenu_Modifier_Click(object sender, System.EventArgs e)
    		{
     
    			using(Fen_Modifier_Equipes f = new Fen_Modifier_Equipes()) //---Le using détruira l'objet à la fin---//
    			{				
    				//---On passe le dataset, le nom de la table, et le curseur---//
    				if(f.ShowDialog(this.dsPrincipal,"Table_Equipes",this.CurseurEquipes)==DialogResult.Cancel)	
    				this.dsPrincipal.Table_Equipes.Rows[this.CurseurEquipes.Position].RejectChanges(); //---Annuler les changements mais seulement sur la ligne en cours---//
     
    				else this.daEquipes.Update(dsPrincipal.Table_Equipes);//---Met à jour---//
    			}
     
     
    		}

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut

    Alors si je comprends bien
    Tu as cet appel à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DialogResult r;
    r = f.ShowDialog(this.dsPrincipal.[Table_Equipes])
    if(r == DialogResult.Cancel) //etc...
    reçu de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public DialogResult ShowDialog(object source) 
     {
        this.tbNom.DataBindings.Add("Text", source,"Nom");
        this.tbAge.DataBindings.Add("Text",source,"Categorie_Age");
        return ShowDialog(); 
     }
    C'est çà :

  3. #3
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Merci de ta réponse.Je ne comprend pas... tu passes 2 arguments tu n'en réceptionne que 1 ?

    EDIT:
    Oups j'ai mal lu.. je recommence mon test...

  4. #4
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    J'ai fais la modification, ca compile, mais le contenu de mon textbox reste su rle premier enregistrement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public DialogResult ShowDialog(object source, CurrencyManager Curseur)
    		{
    			this.CurseurEquipes=Curseur; //---Récupère le curseur de la fen principale---//
     
    			this.tbNom.DataBindings.Add("Text", source,"Nom"); 
    			//this.tbAge.DataBindings.Add("Text",source,datamember+".Categorie_Age");//---On binde le tbAge---//
     
    			//---On écrase le CurrencyManager avec celui de la fen principale---//
    			return ShowDialog(); //---On affiche la fenetre---//            
    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    using(Fen_Modifier_Equipes f = new Fen_Modifier_Equipes()) 
    			{				
    				//---On passe le dataset, le nom de la table, et le curseur---//
    				if(f.ShowDialog(this.dsPrincipal.Table_Equipes,this.CurseurEquipes) ==DialogResult.Cancel)	
    					this.dsPrincipal.Table_Equipes.Rows[this.CurseurEquipes.Position].RejectChanges(); //---Annuler les changements mais seulement sur la ligne en cours---//
     
    				else this.daEquipes.Update(dsPrincipal.Table_Equipes);//---Met à jour---//
    			}
    Il ne tient donc pas compte de la position de mon CurrencyManager... Je me trompe, je commence dans ce domaine, j'ai peut etre des lacunes au niveau compréhension.

    Merci.

  5. #5
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    heu il me semble ne pas avoir utiliser de currencymanager :

  6. #6
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Oui ok, mais si je veux que ce soit en phase par rapport à ma première fenetre je n'ai pas le choix si ? (si je suis sur le deuxième enregistrement dans la première fentre, je veux que ce soit le cas dans la deuxieme...) non ?

  7. #7
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Tu peux également essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Binding bTbNom = new Binding("Text", this.dsPrincipal.[Table_Equipes],"Nom");
    Binding bTbAge= new Binding("Text", this.dsPrincipal.[Table_Equipes],"Categorie_Age");
    //...
    DialogResult r;
    r = f.ShowDialog(bTbNom, bTbAge)
    if(r == DialogResult.Cancel) //etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public DialogResult ShowDialog(Binding bTbNom, Binding bTbAge) 
     {
        this.tbNom.DataBindings.Add(bTbNom);
        this.tbAge.DataBindings.Add(bTbAge);
        return ShowDialog(); 
     }

  8. #8
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Tes solutions marchent je ne le conteste pas.
    Mais ce que je veux, c'est que ce soit en phase avec l'enregistrement sélectionné dans la premiere fenetre, donc le CurrencyManager.Position en gros... Tu vois ce que je veux dire ? Parce que la, mes textbox contienent des données, mais du premier enregistrement, mais pas celui de la position du CurrencyManager...

    Merci de tes réponses

  9. #9
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    ok je reprend car cette fois j'ai testé
    ce qui suit fonctionne pour l'instant à sens unique, c'est à dire qu'il affiche correctement les données en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Object source = this.dsPrincipal.[Table_Equipes];
    string member1 = "Nom";
    string member1 = "Categorie_Age";
    BindingContext b = this.BindingContext;
    DialogResult r; 
    r = f.ShowDialog(source, member1,member2, b);
    if(r == DialogResult.Cancel) //etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public DialogResult ShowDialog(object source, string member1, string member2, BindingContext b) 
     { 
        this.tbNom.Text = b[source, member1].Current.ToString();
        this.tbAge.Text = b[source, member2].Current.ToString();
        return ShowDialog(); 
     }
    çà fait avancer le schmilblick

  10. #10
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Ok je veux tester mais petite question c'est quoi b.Item ? Je cherche, il ne compile pas, je vois pas ce que c'est...

    Merci.

  11. #11
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par diaboloche
    Ok je veux tester mais petite question c'est quoi b.Item ? Je cherche, il ne compile pas, je vois pas ce que c'est...
    Merci.
    Pardon c'est ma traduction du vb vers c# qui cloche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.tbNom.Text = b[source, member1].Current.ToString(); 
    this.tbAge.Text = b[source, member2].Current.ToString();

  12. #12
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		public DialogResult ShowDialog(object source, string member1, string member2, BindingContext b) 
    		{
    			this.tbNom.Text = b[source, member1].Current.ToString(); 
    			this.tbAge.Text = b[source, member2].Current.ToString(); 
     
    			return ShowDialog(); //---On affiche la fenetre---//            
    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private void MonMenu_Modifier_Click(object sender, System.EventArgs e)
    		{
     
    			using(Fen_Modifier_Equipes f = new Fen_Modifier_Equipes()) 
    			{				
    				DialogResult r; 
     
    				r = f.ShowDialog(this.dsPrincipal.Table_Equipes, "Nom","Categorie_Age", this.BindingContext); 
    				if(r == DialogResult.Cancel)
    					this.dsPrincipal.Table_Equipes.Rows[this.CurseurEquipes.Position].RejectChanges(); 				
    				else this.daEquipes.Update(dsPrincipal.Table_Equipes);
    			}
     
     
    		}
    Je commence à me poser des questions Ca ne va tjrs pas et tu me dis que ca fonctionne chez toi... J'ai le même problème, il reste bloqué su rle premier enregistrement

  13. #13
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Je suis absolument sûr que çà fonctionne chez moi, je modifie la selection dans mon datagrid puis j'appelle la popup et toc j'ai les valeurs des colonnes souhaitées affichées dans mes textbox
    je repète la manoeuvre en changeant à chaque fois de selection et le changement est bien repercuté
    Donc c'est que tu appelle ta popup alors que tu es sur le premier enregistrement c'est tout ( il ne serait pas difficile de suivre par des tests les valeurs transmises et récupérées)
    Verfies la doc par toi même
    Propriété BindingContext.Item (Object, String)

  14. #14
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Ok, merci de tes réponses, je vais creuser ca.

  15. #15
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par diaboloche
    J'ai fais la modification, ca compile, mais le contenu de mon textbox reste su rle premier enregistrement...
    tu fait quoi exactement pour synchroniser tes 2 fennetres

  16. #16
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut
    Ben voila ca fonctionne... en faisant je ne sais pas trop quoi de différent mais bon.

    Merci a tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET][ADO.NET] DataBindings et Relations
    Par DotNET74 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 21/07/2005, 15h58
  2. Réponses: 4
    Dernier message: 09/05/2005, 21h01
  3. [VB.NET] Le DataBinding en vb.net, c'est comment?
    Par Pleymo dans le forum ASP.NET
    Réponses: 11
    Dernier message: 04/02/2005, 14h14
  4. [VB.NET][DataBinding] Rafraichissement DataGrid lié à un obj
    Par speedy1496 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/10/2004, 10h15
  5. [C#] Problème de DataBinding
    Par bilb0t dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/10/2004, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo