Désolé si je ne suis pas doué mais cela me parrait assez compliqué sur le principe.Aprés c'est peut-etre plus simple en pratique...
Le souci c'est que mon serveur m'envoi les données toutes les secondes.
Désolé si je ne suis pas doué mais cela me parrait assez compliqué sur le principe.Aprés c'est peut-etre plus simple en pratique...
Le souci c'est que mon serveur m'envoi les données toutes les secondes.
Au lancement de ton application, tu créer ton dataset, puis tu lui ajoutes une datatable que tu lies a ton datagridview.
Ensuite a chaque fois que tu reçois une info, tu ajoutes une ligne:
Me.MonDGV.Tables("MaTable").rows.Add(tesinfos)
Et ton datagridview est mis à jour en direct tout seul... Qu'est ce que t'en dis?
SI j'ai a peu pré compri, mon serveur m'envoi des données instantanées...Celles-ci sont stockées dans le dataset dans une table.
Et ensuite jaffiche mes données dan le DGV avec comme source le datatable?
Ton dataset et ta datatable sont créer dès le départ de ton application.
Quand tu reçois tu as juste a ajouter une ligne a ta datatable.
Et comme il est lié au datagridview, y'a rien a faire, ça s'affiche tout seul!
You got it!
a chaque fois que je crois avoir compris ben je me trompe.Suis-je bête?
Après c'est comme le vélo, ça s'oublie pas !
Tout est possible dans le monde merveilleux de Billou!
Quand tu ajoutes une lignes, tu peux utiliser des variables:
Il faut juste qu'il y est le bon nombre de colonnes, sinon, à l'insertion de la ligne, ça va lever une exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.MonDataset.Tables("MaTable").Rows.add(MonDictionnaire.Item(0), MaDataServeur.ToString)
Donc si j'ai bien compris, je dis bien si :
Petit problème : "MaDataServeur.ToString"!les données que je recois du serveur sont traiter dans ma fonction recevoir...
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 private sub FormLoad 'je créé mon dataset Me.MonDataset = New Dataset 'Je créé ensuite ma table Me.MonDataset.Tables.Add("Tab1") 'Je créé maintenant 2 colonnes une pour le dico, l'autre pour les données Me.MonDataset.Tables("Tab1").columns.add("Dico") Me.MonDataset.Tables("Tab1").columns.add("Données") 'j'créé des lignes en y ajoutant les données Me.MonDataset.Tables("Tab1").Rows.add(MonDictionnaire.Item(i), MaDataServeur.ToString) 'et pour terminer j'affiche en fin les données dans mon DGV Me.MonDGV.Tables("Tab1").rows.Add() end sub
Je ne sais pas si c'est juste mais bon.
C'est presque ça:
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 private sub FormLoad 'je créé mon dataset Me.MonDataset = New Dataset 'Je créé ensuite ma table Me.MonDataset.Tables.Add("Tab1") 'Je créé maintenant 2 colonnes une pour le dico, l'autre pour les données Me.MonDataset.Tables("Tab1").columns.add("Dico") Me.MonDataset.Tables("Tab1").columns.add("Données") Me.MonDGV.DataSource= Me.MonDataset.Tables("Tab1") end sub Private Function Recevoir 'Code Recevoir ' - - - Me.MonDataset.Tables("Tab1").Rows.add(MonDictionnaire.Item(i), MaDataServeur.ToString) End Function
j'y étais presque
Je test et je te dis ça desuite...suspense...
message d'erreur:
MonDataSet n'est pas un membre de 'WindowsApplication1.Client
OUi donc je reprends.Désolé pour l'érreur précédent j'ai rectifier le tir!
C'est cette ligne la qui ne lui plait pas trop:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Me.MonDataset.Tables("Tab1").Rows.add(MonDictionnaire.Item(i), MaDataServeur.ToString)
Voila ma fonction recevoir avec l'emplacement de la ligne à rajouter:
et voici la ligne que j'ai à rajouter dans la fonction recevoir:
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 Function recevoir() As String Dim returnData As String = Nothing Dim inStream(10024) As Byte Dim serverStream As NetworkStream Dim x As Integer = 0 If clientSocket.Connected Then Try serverStream = clientSocket.GetStream() serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize)) returnData = System.Text.Encoding.ASCII.GetString(inStream) Dim len As Integer = returnData.IndexOf("$") If len < 0 Then len = 0 End If If Donnees.ETAT = Donnees.ATTE Or Donnees.ETAT = Donnees.CONN Then MiseEnFormeConn(returnData) Else If Donnees.ETAT = Donnees.AUTH Then x = MiseEnFormeDonnees(returnData) MsgBox(x) End If End If returnData = returnData.Substring(0, len) 'ligne à rajouter Catch ex As Exception 'MsgBox(ex.Message) msg(Donnees.ERR_REC) End Try End If Return returnData End Function
DicAFF est un module qui contient des collection (de type dictionnaire) et des structures.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Me.DataSet.Tables("Tab1").rows.add(DicAff.DicEssais.Values, returndata)
DicEssais.Values me permet d'afficher seulement les valeurs du dictionnaires mais dans mon datagrid il m'affiche l'erreur suivante:
System.Collection.Generic.Dictionnary '2+ValueCollection[System.String,System.string]
Tout semble bon, a part l'appel au dictionnaire. Et malheureusement, je ne l'ai encore jamais utilisé.
Mais apparemment:
Ne désigne pas UN élément en particulier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DicAff.DicEssais.Values
Ça devrait, a priori, ressembler a quelque chose comme:
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part DicAff.DicEssais(12).Values
Il faut que tu regardes aussi ce que te retourne cette fonction, si c'est juste un String ou une Collection de String (un ensemble de 2 string).
Code : Sélectionner tout - Visualiser dans une fenêtre à part DicAff.DicEssais.Item(12).Values
Les dictionnaire possède une clé et une valeur.
Ensuite a toi de voir si tu veux afficher clé ou valeur ou les deux.
Le souci c'est que moi je veux afficher toutes les valeurs de mon dictionnaires...
Et bien tu peux toujours:
ou un truc dans le genre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.DataSet.Tables("Tab1").rows.add(DicAff.DicEssais.Cle.Values & " " & DicAff.DicEssais.Valeur.Values, returndata)
Dans mon cas dans la premiere colonne je ne veux afficher que les valeur et non pas les clés...
précédement voila comment je remplissais la premiere colonne de mon DGV avec ma collection:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 For Each kvp As KeyValuePair(of string , string) in DicoAff.DicEssais if kvp.Value <> Nothing then if j > DGV.RowCount - 1 then DGV.Row.Add() end if DGV.Rows(j).Cells(0).Value = kvp.Value j += 1 end if next kvp
Bon alors je me suis penché sur le problème toute la soirée et je n'ai toujours pas la solution.Je vous explique.
Lorsque je rempli mon dataSet manuellement c'est-a-dire que je tape directement mon texte dedans tous fonctionne corectement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 For i = 0 To Ubound(Tab) - 1 If i<> Nothing then If i > DataGridView1.rowCount - 1 then Me.DataSet.Tables("Tab1").Rows.Add("blabla",Tab(i)) End If End If Next
Mais lorsque je lui dis de remplir la table automatiquement il me génére un erreur et je ne comprend pas du tout pourquoi.
Voici le code:
AIDEZ MOI !!!!!!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 For Each kvp As KeyValuePair(Of string,string) In DicoAff.DicEssais 'dicoaff est un module et dicessais une collection (de type dictionnaire If Kvp.Value <> Nothing then Me.DataSet.Tables("Tab1").Rows.Add(kvp.value,Tab(i)) i = i + 1 end if Next kvp
Partager