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 :

Nouvel enregistrement pas retrouvé d'un formulaire à l'autre


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 985
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 985
    Par défaut Nouvel enregistrement pas retrouvé d'un formulaire à l'autre
    Bonjour tout le monde,

    Dans mon formulaire principal, j'ai un BindingSource lié à une table de DataSet1, et une DataGridView est liée à ce BindingSource.

    À l'ouverture de l'application, les données s'affichent dans la DataGridView, jusque là tout se passe bien.

    Maintenant, je veux insérer un nouvel enregistrement.

    Je trouve que c'est plus clair pour l'utilisateur de le faire avec un formulaire dédié, que j'ouvre en mode dialogue dans le code d'un bouton du formulaire principal.

    Après ça, le formulaire principal retrouve le nouvel enregistrement dans le DataSet, mais pas dans le BindingSource qui pourtant est basé dessus, et donc pas non plus dans DataGridView, ce qui, je pense que vous avez suivi, serait le but.

    J'ai cru qu'avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bindingSource1.SuspendBinding()
    bindingSource1.ResumeBinding()
    j'allais corriger ça, mais ça n'a pas l'air d'être le cas.

    BindingSource a une méthode Add. Alors je me suis dit bonne pioche, je vais me servir de ça.

    Mais ça lève une exception : le contenu de bindingSource1 ne sera plus homogène, ce que j'essaie d'insérer n'est pas du même type que le reste.

    Uh ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ? bindingSource1.List[0].GetType()
    {Name = "DataRowView" FullName = "System.Data.DataRowView"}
    S'ensuit une littérature, si ça branche quelqu'un je pourrai copier ça.

    Ah, oui, évidemment, ce n'était pas un DataRowView, que je tentais d'ajouter, mais mon objet Repas.

    dataSet1 et bindingSource1 ont été créés par l'interface graphique, pour le bindingSource1 j'ai renseigné DataSource = DataSet1 (et le nom de la table dans DataMember).

    Bon, alors première étape, est-ce que vous avez compris ce que j'ai dit ?
    Et si oui, savez-vous me dire où je me suis trompé ?

    Des fois que ça aide, il me semble qu'ici quelqu'un a en gros le même problème que moi :
    https://stackoverflow.com/questions/...ata-in-another

    Projet WinForms basé sur .Net Framework 4.7.2, avec données sur SQL Express
    Microsoft Visual Studio Community*2022 (64*bits) - Current
    Version 17.6.4

    Pour ce qui est de .Net Framework, la version que je donne ci-dessus apparaît dans les propriétés du projet.
    Dans "À propos de Visual Studio", c'est 4.8.09037.

    SQL Server Management Studio 15.0.18386.0
    SQL Server Management Objects (SMO) 16.100.46437.65
    Outils clients Microsoft Analysis Services 15.0.19618.0
    Microsoft Data Access Components (MDAC) 10.0.19041.3208
    Microsoft MSXML 3.0 6.0
    Microsoft .NET Framework 4.0.30319.42000
    Système d'exploitation 10.0.19045

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    Essaye peut-être avec bindingSource1.ResetBinding(false)

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 985
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 985
    Par défaut
    Ça me rappelait un peu quelque chose parce que j'avais déjà essayé, hélas ça ne donne pas le nouvel enregistrement.

    J'ai aussi essayé avec ResetBinding(true), plus parce que ça ne mange pas de pain que par réelle conviction.

    Par ailleurs j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataView view = new DataView(ds.Repas);
    view.RowStateFilter = DataViewRowState.CurrentRows;
    et j'ai un peu joué sur RowStateFilter, dans Added il n'y a rien, c'est encore CurrentRows le plus coopératif.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 591
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 591
    Par défaut
    peut-être voir le processus décrit à la fin de la doc https://learn.microsoft.com/en-us/do...ramework-4.7.2

  5. #5
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 985
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 985
    Par défaut
    J'ai écrit une procédure pour l'événement DataSet1_MergeFailed, qui ne semble pas s'exécuter.

    Sur bindingSource1.ResetBindings() j'ai mis un point d'arrêt, là je vois qu'on exécute Row_Enter, mais sur le dernier enregistrement précédemment existant (le premier affiché dans la liste).

    Ce serait intéressant d'exécuter Row_Enter avec la nouvelle date.

  6. #6
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 985
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 985
    Par défaut
    De guerre lasse j'ai mis ça dans le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (!bindingSource1.Contains(new Repas { LaDate = DateTime.Parse(view[0]["Ladate"].ToString()) }))
    {
        bindingSource1.ResetBindings(false);
    }
    Mais ça continue de s'exécuter jusqu'à ce que je crie grâce.

    (avant j'ai essayé avec ResetBindings(true)).

    dans DateTime.Parse(view[0]["Ladate"].ToString())
    j'ai bien la nouvelle date.

    Tiens, au départ c'était LaDate, apparemment on n'est pas à cheval sur la casse.

    On dirait que quelque part une propriété est verrouillée, il faut que j'arrive à réaliser laquelle. Et surtout par quoi.

    ***

    Souvent, au moment d'exécuter, l'application échoue à compiler, et je dois effacer le fichier Form1.resx : il échoue à afficher les valeurs de ucTension1.DataSource et printForm1.PrinterSettings

    Pour cette dernière ça fait un bon moment, pour l'autre c'est plus récent.

    Après avoir effacé le fichier Form1.Resx, dans Form1.designer.cs, je dois mettre en commentaire l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                this.printForm1.PrinterSettings = ((System.Drawing.Printing.PrinterSettings)(resources.GetObject("printForm1.PrinterSettings")));

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/11/2022, 15h44
  2. Réponses: 0
    Dernier message: 15/05/2020, 14h04
  3. Réponses: 3
    Dernier message: 09/08/2014, 06h42
  4. Réponses: 9
    Dernier message: 04/06/2012, 10h28
  5. enregistrement des données d'une formulaire à une autre
    Par rihab007 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/06/2008, 12h32

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