Bonjour.
Si tu as peuplé "proprement" ton datagridview, c'est à dire grâce au binding (donc d'une collection d'instances d'une classe métier) alors tu serializes la collection à chaque modification et tu l'envoies par réseau (UDP, TCP, c'est toi qui voit en fonction de la sécurisation dont tu as besoin).
Chaque application, écoute son port réseau, déserialize la collection quand elle arrive et rebinde le datagridview.
Si tu n'as pas peuplé ton datagridview comme ça, et bien pour rendre ton code plus propre à mon avis c'est plus important que ton fichier et ton timer. Voir ici https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Malheureusement nous ne sommes plus nombreux à répondre.
Donc forcément, c'est régulièrement moi....
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Bonjour Whismeril,
J'ai pas mal bossé sur le binding, Malheureusement je trouve ta source trop compliqué pour mon niveau.
Du coup j'ai ce code dans un module
Module M_DGV_Data Friend MyDataGrid As New List(Of C_DGV_Data) End Module Public Class C_DGV_Data Private m_Id As Integer Private m_Nom As String Private m_Qte As Integer Private m_Valider As Boolean Private m_QteReelle As Integer <System.ComponentModel.DisplayName("Id")> Public Property Id() As Integer Get Return m_Id End Get Set(ByVal Value As Integer) m_Id = Value End Set End Property <System.ComponentModel.DisplayName("Produit(s)")> Public Property Nom() As String Get Return m_Nom End Get Set(ByVal value As String) m_Nom = value End Set End Property <System.ComponentModel.DisplayName("Qté")> Public Property Qte() As Integer Get Return m_Qte End Get Set(ByVal Value As Integer) m_Qte = Value End Set End Property <System.ComponentModel.DisplayName("Validation")> Public Property Valider() As Boolean Get Return m_Valider End Get Set(ByVal Value As Boolean) m_Valider = Value End Set End Property <System.ComponentModel.DisplayName("Qté" & vbCrLf & "Réelle")> Public Property QteReelleee() As Integer Get Return m_QteReelle End Get Set(ByVal Value As Integer) m_QteReelle = Value End Set End Property Public Sub New(ByVal N_id As Integer, ByVal N_nom As String, ByVal N_qte As Integer, ByVal N_Valider As Boolean, ByVal N_QteReelle As Integer) m_Id = N_id m_Nom = N_nom m_Qte = N_qte m_Valider = N_Valider m_QteReelle = N_QteReelle End Sub End Class
Dans ma Form_Load, j'ai celui ci et il fonctionne, ma DataGridView contient bien les données
Private Sub Form1_Load(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles MyBase.Load MyDataGrid.Add(New C_DGV_Data("1", "Test 1", 6, True, 6)) MyDataGrid.Add(New C_DGV_Data("2", "Test 2", 6, True, 6)) CDGVDataBindingSource.DataSource = MyDataGrid End Sub
La ou ca ne fonctionne plus c'est quand j'essai d'ajouter des données dans ma collection et les afficher dans la DataGridView.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MyDataGrid.Add(New C_DGV_Data("3", "Test 3", 6, False, 6)) CDGVDataBindingSource.DataSource = MyDataGrid End Sub
La donnée que j'ajout en click sur button_1 ne se met pas a jour dans la DataGridView. je ne comprend pas pourquoi
Tu aurais une explication svp ?
Bonjour
Essaye
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click CDGVDataBindingSource.DataSource = Nothing MyDataGrid.Add(New C_DGV_Data("3", "Test 3", 6, False, 6)) CDGVDataBindingSource.DataSource = MyDataGrid End Sub
Même avec un bindingsource, le rafraîchissement quand un objet est ajouté, déplacé ou supprimé ne se fait pas bien. Ça marche beaucoup mieux en WPF
Après, j'ai l'impression que tu raisonnes "à l'envers" (ou alors tu veux faire du MVVM, mais faut pas en winform, ce n'est pas adapté)
L'idée est de créer un objet (et sa collection) qui permet de faire ton traitement et accessoirement l'afficher.
Par exemple, (j'imagine que ton logiciel sert à un grossiste), pout l'argumentaire) pour tes produits, tu pourrais avoir besoin de la masse et du volume pour choisir le moyen de transport d'une commande
Mais dans la fenêtre d'inventaire, ce n'est pas utile de l'afficher.
Là tu as créé l'objet "juste" pour l'afficher dans ce Datagridview (et pas dans d'autres contrôles ni dans d'autres fenêtres) d'ailleurs c'est dans le nom de l'objet et de la collection.
Et ça donne l'impression que dans la fenêtre de commande, tu vas faire une autre collection d'un autre objet, alors que c'est la même donnée, ça devrait être une seule et même collection qui est juste passée en paramètre.
Je comprends parfaitement que ce sont des concepts difficiles à appréhender quand on est habitué à manipuler des données "unitaires".
Il faut prendre un peu de recul, et imaginer le vrai objet, le produit que te livre le fabriquant, que ton magasinier range, éventuellement que tes ouvriers modifient (il le peigne à tes couleurs on va dire) et enfin que tu envoies à un client, c'est toujours le même produit.
C'est pas une variable qui apparaît dans l'inventaire quand le magasinier vérifie que la quantité livrée est bonne puis disparaît. Puis une seconde variable qui apparaît dans le stock. Et puis que l'on clone le temps du passage à l'atelier de peinture (ben oui, même à l'atelier il est quand même dans le stock) et ha zut, maintenant qu'il est repeint, faut le mettre à jour dans le stock etc...
Non, c'est une seule instance du début à la fin, que l'on passe de collection en collection, il peut même être dans plusieurs en même temps (physiquement dans le stock et à l'atelier et affiché par Joel dans la fenêtre d'inventaire, par Patrick dans celle de l'atelier et par Jacques dans celle de la commande d'un client en préparation (avec une alerte peinture en cours) )
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
15 août 2022 à 19:34
Whismeril, c'est la troixième fois que tu m'aides...
décidement ! et à chaque fois tu es de bon conseil.
Non je n'ai pas utilisé le Binding, je rempli directement les cells à la volé mais je vais étudier la solution Binding.
Pour l'échange de donnée via le TCP ou UDP, j'ai fais quelques appli qui s'échange des fichiers ou des trames.
pour ça je gère bien.
Encore merci,
J'attend d'avancer sur le code, je mettrais mon code avant de mettre le sujet en résolue.