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

publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016 - Modifié par publespace le 3/03/2016 à 20:21
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre 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
A voir également:

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 3/03/2016 à 20:08
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.
0
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016
Modifié par publespace le 3/03/2016 à 21:07
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)
0
Whismeril Messages postés 19036 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 mai 2024 656
3 mars 2016 à 21:12
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
0
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016
4 mars 2016 à 00:12
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19036 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 mai 2024 656
4 mars 2016 à 06:54
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.
0
Whismeril Messages postés 19036 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 mai 2024 656
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.....
0
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016
4 mars 2016 à 14:47
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 ?
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
4 mars 2016 à 17:11
Bonjour publespace
Vous n'avez toujours pas utilisé la coloration syntaxique.
0
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016
4 mars 2016 à 17:16
la coloration syntaxique ?

je ne comprend pas
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
Modifié par ucfoutu le 5/03/2016 à 06:46
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.
0
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016
8 mars 2016 à 12:37
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 ?

0
Whismeril Messages postés 19036 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 mai 2024 656
8 mars 2016 à 12:58
Là c'est un code pour winform, le binding en wpf se gère dans le xaml
0
publespace Messages postés 31 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 15 mars 2016
13 mars 2016 à 18:57
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
0
Rejoignez-nous