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

C# Discussion :

Rafraichissement Données fenetre exterieure


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut Rafraichissement Données fenetre exterieure
    Bonjour,

    Alors une question toute bete.

    Comment puis-je mettre à jour les données contenue dans un datagridview dans la fenetre parent.

    en effet, j'ai une fenêtre qui en apelle une autre. cette dernière peut modifier des valeurs qui sont affichées dans la fenetre de base. Seulement voilà, pas moyen de les mettre à jour d'une manière dynamique.
    (Enfin, je sais pas comment on fait quoi! )

    merci de votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par mayekeul Voir le message
    Bonjour,

    Comment puis-je mettre à jour les données contenue dans un datagridview dans la fenetre parent.
    [../..]
    Seulement voilà, pas moyen de les mettre à jour d'une manière dynamique.
    (Enfin, je sais pas comment on fait quoi! )

    merci de votre aide
    Tu as une infinité de solutions.
    Quand tu ouvres le formulaire enfant, tu peux utiliser un booleen pour t'assurer qu'il y a eu des modifications et quand tu reviens sur ton formulaire d'appel, si le booleen à changé, tu recharges ton gridview.

    Exemple dans le formulaire appelante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Boolean bRechargeGridView = false;
      ToProjet.Forms.TaForm fcb = new TonProjet.Forms.TaForm();
      fcb.ShowDialog();
    // Des données ont-elles été modifiées ?
    if (fcb.bRechargeGridView) 
    { // Rechargement du GridView }
    Exemple dans la form appelée, à mettre en tête de ta form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            // Booleen déterminant si on modifie des données
            public Boolean bRechargeGridView= false;
    Je ne t'ai pas mis bien sûr l'endroit où on change le booléen dans le formulaire appelé et le code de rechargement de ta GridView car ce n'est pas le fond de ton problème à première vue.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    tu veux les mettre à jour en même temps ou à la fermeture de la fenêtre enfant?

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour et merci à vous deux.

    Citation Envoyé par youtpout978
    tu veux les mettre à jour en même temps ou à la fermeture de la fenêtre enfant?
    Le must serait en même temps mais à la fermeture convient tout à fait et c'était le but au départ d'ailleurs

    pour répondre à potus

    Citation Envoyé par Potus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (fcb.bRechargeGridView)
    je suis pas sur de te suivre
    ce n'est pas plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHILE (!fcb.bRechargeGridView)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Bonjour
    Avant tout comment remplis tu ton DataGridView ?

    Le meilleur dans ces cas là et d'utiliser un binding, tu passes ensuite ton objet/tes objets par référence à tes fenêtres "filles" et tout changement sera répercuté automatiquement sur ton DataGridView.

    Je penses particulièrement à une BindingList.

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    ce sont des bindings source basé sur un base SQL Serveur

    la fenetre enfant lance une procedure stockée qui modifie les données contenue dans la fenetre parent.

    alors très bien ta méthode, ça m'intéresse d'ailleurs fortement... surtout si tu m'en dis plus.

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    Une idée serait de mettre une méthode public dans ta fenêtre parente avec en paramêtre la source de donnée ou dedans tu bind ta bindingsource avec ton parametre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public void BinderDataSource(object source)
            {
                bindingSource1.DataSource = source;
                dataGridView1.DataSource = bindingSource1;
            }
    quand tu appelle ta fenetre fille tu lui passe en paramêtre la fenêtre appelante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Form2 fenetreFille = new Form2(this);
                fenetreFille.Show();
    dans ta fenetre fille tu la récupère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private Form1 fenetreParente;
     
            public Form2()
            {
                InitializeComponent();
            }
     
            public Form2(Form1 fenetreParente)
            {
                InitializeComponent();
                this.fenetreParente = fenetreParente;
            }
    comme ça quand tu lie tes données dans la fenetre fille tu peux le faire aussi dans la fenêtre mère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     bindingSource1.DataSource = maSource;
                dataGridView1.DataSource = bindingSource1;
     
                if (fenetreParente != null)
                {
                    fenetreParente.BinderDataSource(bindingSource1);
                }

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je vois bien mais

    comment déclarer la forme dans la fenetre fille?

    il faut savoir que les fenetres dans mon cas sont dans deux projets différents
    si je veux faire comme ton exemple, ne vais-je pas faire face à une erreur de référence circulaire??

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    tes 2 projets peuvent avoir connaissance l'un de l'autre ?
    si c'est le cas tu peux importer une référence de ton premier projet dans le second et donc pouvoir spécifier le type de la fenêtre parente
    après ma méthode n'est pas forcément la meilleur, il y a plusieurs solution (l'utilisation d'interface par exemple)

  10. #10
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Citation Envoyé par youtpout978
    tes 2 projets ont connaissance l'un de l'autre ?
    il y a une référence au deuxieme projet pour pouvoir appeler la fenetre enfant
    Citation Envoyé par youtpout978
    si c'est le cas tu peux importer une référence de ton premier projet dans le second et donc pouvoir spécifier le type de la fenêtre parente
    Comment fait-on ?
    Citation Envoyé par youtpout978
    après ma méthode n'est pas forcément, il y a plusieurs solution
    je suppose que oui mais bon ça m'intéresse quand même

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    ah oui dans ton cas la fenetre2 ne peus pas avoir connaissance de la fenêtre1, je pense que tu peux utiliser une interface dans ton cas (INotifyPropertyChanged)
    j'essaye je te tiens au courant

  12. #12
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Ah ben merci

    c'est vraiment super cool!


  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Le plus simple ici pour moi est de passer directement tes données à modifier, et non pas passer la fenêtre mère en paramètre du constructeur.

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    je ne pense pas que ça soit le plus propre mais c'est plus facile à mettre en place, tu peux mettre a public (dans les propriétés) ton bindinsource dans la fenêtre fille comme ça tu peux directement la lié a ton datagrid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Form2 fenetreFille = new Form2();
                dataGridView1.DataSource = fenetreFille.bindingSource1;
                fenetreFille.Show();

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Le but en passant directement une BindingList est ne de pas devoir redéfinir la DataSource du DataGridView de la fenêtre mère après la modification.

    Petit exemple :

    Fenêtre mère
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                BindingList<Voiture> voitures = new BindingList<Voiture>();
                voitures.Add(new Voiture("Fiat"));
                voitures.Add(new Voiture("Audi"));
                voitures.Add(new Voiture("BMW"));
                voitures.Add(new Voiture("Renault"));
                voitures.Add(new Voiture("Peugeot"));
                voitures.Add(new Voiture("Ford"));
                dataGridViewVoitures.DataSource = voitures;
            }
     
            private void buttonModifier_Click(object sender, EventArgs e)
            {
                if (dataGridViewVoitures.SelectedRows.Count > 0)
                {
                    Voiture voiture = (Voiture)dataGridViewVoitures.SelectedRows[0].DataBoundItem;
                    FormModification modif = new FormModification(voiture);
                    DialogResult diag = modif.ShowDialog();
                }
            }
        }
    Fenêtre fille
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public partial class FormModification : Form
        {
            Voiture voiture = null;
            public FormModification(Voiture _voiture)
            {
                InitializeComponent();
                voiture = _voiture;
                textBoxMarque.Text = voiture.Marque;
            }
     
            private void buttonAnnuler_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.Cancel;
            }
     
            private void buttonOK_Click(object sender, EventArgs e)
            {
                string marque = textBoxMarque.Text;
                if (String.IsNullOrEmpty(marque))
                {
                    MessageBox.Show("Veuillez spécifier la marque de la voiture", "Donnée invalide", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                voiture.Marque = marque;
                DialogResult = DialogResult.OK;
            }
        }
    Class voiture

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    public class Voiture : INotifyPropertyChanged 
        {
            private Guid _id;
            private String _marque;
     
            public Guid ID
            {
                get
                {
                    return _id;
                }
                set
                {
                    if (_id != value)
                    {
                        _id = value;
                        NotifyPropertyChanged("ID");
                    }
                }
            }
     
            public String Marque
            {
                get
                {
                    return _marque;
                }
                set
                {
                    if (_marque != value)
                    {
                        _marque = value;
                        NotifyPropertyChanged("Marque");
                    }
                }
            }
     
            public Voiture() : this("Marque inconnue")
            {
     
            }
            public Voiture(String marque)
            {
                ID = Guid.NewGuid();
                Marque = marque;
            }
     
     
            #region INotifyPropertyChanged Members
     
            public event PropertyChangedEventHandler PropertyChanged;
     
            #endregion
     
            private void NotifyPropertyChanged(string name)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }

  16. #16
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    Alors, je devrais passer toute ma table sql dans une binding list???

Discussions similaires

  1. [Hibernate] rafraichissement données d'Hibernate
    Par michaelbob dans le forum Hibernate
    Réponses: 21
    Dernier message: 23/07/2007, 10h45
  2. Rafraichissement données TForm
    Par lenrok dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/01/2007, 19h45
  3. rafraichissement de fenetre
    Par fontaigo dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/05/2006, 20h50
  4. Rafraichissement données sous-formulaire
    Par christellel198 dans le forum Access
    Réponses: 1
    Dernier message: 31/10/2005, 19h20
  5. [VB6] Dimension d'une fenetre extérieure
    Par Ingham dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/01/2003, 16h52

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