Ajouter une ligne dans une datagrid !!! j'y arrive pas

Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 3 mars 2016 à 19:56 - Dernière réponse :
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 13 mars 2016 à 18:57
Bonjour à tous

voila plusieurs heure (11 pour etre précis) que je me débat avec les nouvelle datagrid vb.net wpf

j'ai une truc tout simple à faire et j'y arrive pas en gros j'ai besoin d'exposer des donnée sous forme de tableau d'ou l'utilisaton d'une datagrid

sauf que je n'arrive pas à remplir ma datagrid !!!!!

mes données sont stockés dans une plusieurs variable "string" j'aimerais crée une ligne dans ma datagrid


quelqu'un peut il me donner tuto, un site, un exemple ......


merci d'avance
Afficher la suite 

Votre réponse

13 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 3/03/2016 à 20:08
0
Merci
Bonjour,
Joli "titre" (comme je les apprécie ...) !
Et <joli "respect" des règles (à relire, donc) de ce forum.
Où est donc (je ne le vois pas) le code au moins tenté ?

PS : voilà au moins SIX ans que tu développes sous VB.Net et au moins autant que tu viens sur ce forum, sans que nous n'ayons jamais vu la moindre de ligne de code écrite par toi....
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- Modifié par publespace le 3/03/2016 à 21:07
0
Merci
bonjour merci pour ta réponse

mea culpa j'ai changé le titre quand au reglement la dernière fois que le l'ai lu c'étais y a 6 ans

si je n'ai pas publié de code c'est parce que j'ai quitté la profession depuis plusieurs années maintenant je suis maçon.

je cherche un equivalent à dataGridView1.Rows.Add

je sui en train de desesperer

voila mon code

Dim add_data(6) As String
add_data(0) = "tour"
add_data(1) = "t1"
add_data(2) = "t2"
add_data(3) = "t3"
add_data(4) = "t4"
add_data(5) = "temps"
add_data(6) = "pit lane"

dataGrid.Items.Add(add_data)

mais cela n'affiche qu'une ligne non remplis dans mon datagrid (les cases sont vides)

voila tout ce que j'ai copié sur d'autres site rien ne marche evidement et à force de trafiquer dans tous les sens et d'essayer tas de syntaxe sa ressemble plus à rien.


'Dim DataTable dt = New DataTable()
'dt.Columns.Add("Colonne 1", TypeOf (String))
'dt.Columns.Add("Colonne 2", TypeOf (String))
'dt.Rows.Add("Ligne1")
' myDataGridWF.DataSource = dt

'dataGrid.DataContext()
'dataGrid.Items.Add(add_data)
'dataGrid.ItemsSource
'dataGrid.im

'InitializeComponent();
'Dim dt = New DataGrid()

'dt.Columns.Add("Name", TypeOf (String));
'dt.Columns.Add("Age", TypeOf (Int()));
'dt.Columns.Add("Group", TypeOf (Int()));

'dt.Items.Add(New Object("Peter", 24, 3))
'dt.Items.Add(New Object[3] { "Rose", 17, 1 })
'dt.Items.Add(New Object[3] { "John", 19, 2 })
'dt.Items.Add(New Object[3] { "Steven", 20, 1 })
'dt.Items.Add(New Object[3] { "Tom", 20, 3 })
'dataGrid.ItemsSource = dt.AsDataView()
'dataGrid.Items.Add("toto")
'dataGrid.ItemBindingGroup

'dataGrid.ItemBindingGroup.SetValue(add_data)

'Dim namesTable As New DataTable("Names")
'Dim myRow As DataRow
' myRow = namesTable.NewRow()
' On ajoute la nouvelle row a la collection
' myRow("Reference") = reference
'myRow("Prix_Unitaire") = PU
'myRow("Quantite") = qte
'myRow("Total") = total
'namesTable.Rows.Add(myRow)
''ici c t pour faire un dump...je le laisse ca peut servir
' Dim dc As DataColumn
' For Each dc In myTable.Columns
' Console.WriteLine(dc.ColumnName)
' Next
' datab.DataSource = namesTable

'dataGrid.Items.Add("toto")
'dataGrid.SetBinding(add_data, New Binding)
Commenter la réponse de publespace
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 3 mars 2016 à 21:12
0
Merci
Bonsoir,

autant en winform, on peut arriver à faire un peu comme en VB6 (c'est pas bien, mais ça peut plus ou moins bien tourner).

En WPF ça n'est pas possible.
VB.Net est un langage objet, WPF est un "langage d'interface" objet.
Donc il faut que tu travailles en objet.

Tu crées une classe dont les propriétés vont représenter les colonnes de ta grilles (et tant qu'à faire faire les calculs qui vont bien, je voies PU et Qt et Total, alors Total retournera PU * Qt en interne de la classe), tu remplis une collection avec les instances de cette classe et tu bindes le tout sur le datagrid.

Ça ne s'explique pas en quelques lignes, alors je te conseille d'acheter "WPF par la pratique" http://www.eyrolles.com/Informatique/Livre/wpf-par-la-pratique-9782212124224
Commenter la réponse de Whismeril
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 4 mars 2016 à 00:12
0
Merci
bonjour merci pour la réponse je connais tres peu la POO comme je vous disais sa fait longtemps que je ne code plus

j'ai quand meme fait des recherche je progresse grace à vous et je vous en remerci

voici ce que j'ai codé

d'abord j'ai créé une classe data_pilote

Public Class data_pilote

Public tour As String
Public t1 As String
Public t2 As String
Public t3 As String
Public t4 As String
Public temps As String
Public pit_lane As String

End Class


en suite j'ai rajouté dans mon code

Dim M1 As New data_pilote

M1.tour = "tour"
M1.t1 = "chrono au T1"
M1.t2 = "chrono au t2"
M1.t3 = "chrono au t3"
M1.t4 = "chrono au t4"
M1.temps = "chrono total"
M1.pit_lane = "pit lane"

dataGrid.ItemsSource = M1


maintenant il me sors l'erreur suivante

"Une exception non gérée du type 'System.InvalidCastException' s'est produite dans motogp.exe

Informations supplémentaires : Impossible d'effectuer un cast d'un objet de type 'data_pilote' en type 'System.Collections.IEnumerable'."

quelqu'un a t il une suggestion ?
Commenter la réponse de publespace
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 4 mars 2016 à 06:54
0
Merci
Bonjour

je connais tres peu la POO
et bien, si tu veux réussir en wpf, il faut reprendre au moins les bases
http://plasserre.developpez.com/cours/vb-net/
  • Dans la clase, il faut écrire des propriété et pas des champs public.
  • Ensuite, l'exemple que tu montres,l'instance M1 semble être l'entête des colonne, ça n'a pas d'intérêt, les entêtes tu les gère dans le xaml, il faut binder les données, du coup T1, T2... Temps devraient être de type TimeSpan plutôt que string.
  • Concernant ton erreur, je t'ai dit plus haut que l'on binde une collection, c'est à dire un tableau, une liste, une observableliste, un IEnumerable<trucmuche>, etc.... ce n'est pas ce que tu as envoyé.
  • Voila un exempel de bindinf de datagrid, http://www.wpftutorial.net/datagrid.html il y en a plein d'autres en cherchant un peu... Le C# se traduit en ligne en VB.Net sans problème et le xaml est le même.
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 4 mars 2016 à 06:58
PS pour poster un code, merci d'utiliser la coloration syntaxique
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code la coloration syntaxique

Ça existait déjà il y a 6 ans.....
Commenter la réponse de Whismeril
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 4 mars 2016 à 14:47
0
Merci
ok je progresse

j'ai continué mes recherches autour des datagrid si j'ai bien compris il faut liers chaques colonnes de la datagrid à chaques colonnes de mes datas c'est ce qu'on appele "binder".

donc effectivement quand je rajoute une ligne elle apparait dans ma datagrid mais elle apparait vide donc c'est l'etape bind qui me pose probleme

en relisant les mesages je me rends compte que c'est e gros ce que tu esssayais de me dire mais je ne le comprend que maintenant


voici le code tel qi'il est maintenant la grid sera créé de façon dynamique (1 par pilote)

'je cree ma datagrid et j'affecte mes propiété
Dim my_datagrig As New Controls.DataGrid()
my_datagrig.Width = 300
my_datagrig.Height = 300
my_datagrig.Name = prenom_pilote & nom_pilote


'ici je cree mes colonnes
Dim colonne_tour As New DataGridTextColumn()
colonne_tour.Header = "Tour"
colonne_tour.Binding = New Binding("tour")
my_datagrig.Columns.Add(colonne_tour)


Dim colonne_t1 As New DataGridTextColumn()
colonne_t1.Header = "T1"
colonne_t1.Binding = New Binding("T1")
my_datagrig.Columns.Add(colonne_t1)


Dim colonne_t2 As New DataGridTextColumn()
colonne_t2.Header = "T2"
colonne_t2.Binding = New Binding("T2")
my_datagrig.Columns.Add(colonne_t2)


Dim colonne_t3 As New DataGridTextColumn()
colonne_t3.Header = "T3"
colonne_t3.Binding = New Binding("T3")
my_datagrig.Columns.Add(colonne_t3)


Dim colonne_t4 As New DataGridTextColumn()
colonne_t4.Header = "T4"
'colonne_t4.Binding = New Binding("T4")
my_datagrig.Columns.Add(colonne_t4)


Dim colonne_temps As New DataGridTextColumn()
colonne_temps.Header = "Temps"
colonne_temps.Binding = New Binding("Temps")
my_datagrig.Columns.Add(colonne_temps)


Dim colonne_pit_lane As New DataGridTextColumn()
colonne_pit_lane.Header = "Pit lane"
colonne_pit_lane.Binding = New Binding("Pit lane")
my_datagrig.Columns.Add(colonne_pit_lane)


grid.Children.Add(my_datagrig)


mon probleme ce sont les lignes (traduite depuis une ligne de code c# que je ne retrouve plus) :

colonne_pit_lane.Binding = New Binding("Pit lane")


elle me renvoie une erreur :

La résolution de surcharge a échoué, car aucun 'New' accessible n'accepte ce nombre d'arguments.

une erreur de syntaxe j'imagine



des sugestions ?
Commenter la réponse de publespace
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Dernière intervention
13 août 2017
- 4 mars 2016 à 17:11
0
Merci
Bonjour publespace
Vous n'avez toujours pas utilisé la coloration syntaxique.
Commenter la réponse de Zermelo
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 4 mars 2016 à 17:16
0
Merci
la coloration syntaxique ?

je ne comprend pas
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Dernière intervention
13 août 2017
- 4 mars 2016 à 18:49
Dans le rectangle que je viens d'ouvrir, je vois en haut et à droite un symbole <>. Mettez votre code entre deux de ces symboles.
Bonne soirée.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Commenter la réponse de publespace
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 8 mars 2016 à 12:37
0
Merci
Ok





'je cree ma datagrid et j'affecte mes propiété 
Dim my_datagrig As New Controls.DataGrid() 
my_datagrig.Width = 300 
my_datagrig.Height = 300 
my_datagrig.Name = prenom_pilote & nom_pilote 


'ici je cree mes colonnes 
Dim colonne_tour As New DataGridTextColumn() 
colonne_tour.Header = "Tour" 
colonne_tour.Binding = New Binding("tour") 
my_datagrig.Columns.Add(colonne_tour) 


Dim colonne_t1 As New DataGridTextColumn() 
colonne_t1.Header = "T1" 
colonne_t1.Binding = New Binding("T1") 
my_datagrig.Columns.Add(colonne_t1) 


Dim colonne_t2 As New DataGridTextColumn() 
colonne_t2.Header = "T2" 
colonne_t2.Binding = New Binding("T2") 
my_datagrig.Columns.Add(colonne_t2) 


Dim colonne_t3 As New DataGridTextColumn() 
colonne_t3.Header = "T3" 
colonne_t3.Binding = New Binding("T3") 
my_datagrig.Columns.Add(colonne_t3) 


Dim colonne_t4 As New DataGridTextColumn() 
colonne_t4.Header = "T4" 
colonne_t4.Binding = New Binding("T4") 
my_datagrig.Columns.Add(colonne_t4) 


Dim colonne_temps As New DataGridTextColumn() 
colonne_temps.Header = "Temps" 
colonne_temps.Binding = New Binding("Temps") 
my_datagrig.Columns.Add(colonne_temps) 


Dim colonne_pit_lane As New DataGridTextColumn() 
colonne_pit_lane.Header = "Pit lane" 
colonne_pit_lane.Binding = New Binding("Pit lane") 
my_datagrig.Columns.Add(colonne_pit_lane) 


grid.Children.Add(my_datagrig) 





mon probleme ce sont les lignes (traduite depuis une ligne de code c# que je ne retrouve plus) :


colonne_pit_lane.Binding = New Binding("Pit lane") 



elle me renvoie une erreur :

La résolution de surcharge a échoué, car aucun 'New' accessible n'accepte ce nombre d'arguments.

une erreur de syntaxe j'imagine



des sugestions ?

Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 8 mars 2016 à 12:58
Là c'est un code pour winform, le binding en wpf se gère dans le xaml
Commenter la réponse de publespace
Messages postés
31
Date d'inscription
samedi 18 août 2007
Dernière intervention
15 mars 2016
- 13 mars 2016 à 18:57
0
Merci
Salut à vous voila la méthode que j'ai trouvé pour résoudre mon problème



'je créé le dataset avec la table
Dim DataSet_telemetrie_pilote As New System.Data.DataSet()


'je crée la table
Dim table_pilote As New System.Data.DataTable

DataSet_telemetrie_pilote.Tables.Add(table_pilote)
table_pilote.TableName = num_pilote
table_pilote.Columns.Add("Tour")
table_pilote.Columns.Add("T1")
table_pilote.Columns.Add("T2")
table_pilote.Columns.Add("T3")
table_pilote.Columns.Add("T4")
table_pilote.Columns.Add("Temps")
table_pilote.Columns.Add("Pit lane")


'je crée une ligne
Dim nouvelle_ligne_chronos As System.Data.DataRow = table_pilote.NewRow


'j'insère mes valeurs cette partie peut etre mise dans une boucle
nouvelle_ligne_chronos("Tour") = "valeur tour"
nouvelle_ligne_chronos("T1") = "valeur tour"
nouvelle_ligne_chronos("T2") = "valeur tour"
nouvelle_ligne_chronos("T3") = "valeur tour"
nouvelle_ligne_chronos("T4") = "valeur tour"
nouvelle_ligne_chronos("Temps") = "valeur tour"
nouvelle_ligne_chronos("Pit lane") = "valeur tour"

'j'insère ma ligne
table_pilote.Rows.Add(nouvelle_ligne_chronos)


'j'envoi le tout dans itemsource
datagrid_pilote.ItemsSource = DataSet_telemetrie_pilote.Tables(num_pilote).DefaultView








voila merci pour votre aide
Commenter la réponse de publespace

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.