Bon j'ai réussi à tout remettre en marche, le mac avait "oublié" que virtualBox est une application autorisé à trifouiller au système.
Mais le temps que je trouve le bon post sur le net expliquant comment régler le problème, l'après midi est passé.....
Je pars du principe que tu as lu le tuto et testé le projet.
j'ai écrit une classe que j'ai appelé LaClassDeScn. Elle dispose des 4 propriétés qui seront affichées dans le datagridview.
La classe implémente INotifyPropertyChanged pour interagir rapidement avec le binding.
Imports System
Imports System.ComponentModel
Class LaClassDeScn
Implements INotifyPropertyChanged
''<summary>
'' Construit une instance à partir des paramètres d'entrée, ceux ci peuvent être issus de la BDD ou d'ailleur
'' </summary>
'' <param name="LaDate"></param>
'' <param name="ChiffreAffaire"></param>
'' <param name="LaCondition"></param>
Public Sub New(ByVal LaDate As DateTime, ByVal ChiffreAffaire As Double, ByVal LaCondition As String)
MaDate = LaDate
CA = ChiffreAffaire
Condition = LaCondition
End Sub
Private laDate As DateTime
'' <summary>
'' Date issue de la BDD et affichée dans le Datagriview
'' </summary>
Public Property MaDate As DateTime
Get
Return laDate
End Get
Set(ByVal Value As DateTime)
If laDate <> Value Then
laDate = Value
GenerePropertyChanged("Date")
End If
End Set
End Property
Private chiffreAffaire As Double
'' <summary>
'' Chiffre d'affaire issu de la BDD et affiché dans le datagridview
'' </summary>
Public Property CA As Double
Get
Return chiffreAffaire
End Get
Set(ByVal Value As Double)
If chiffreAffaire <> Value Then
chiffreAffaire = Value
GenerePropertyChanged("CA")
End If
End Set
End Property
Private laCondition As String
'' <summary>
'' Condition à vérifier lors du click sur la case à cocher
'' </summary>
Public Property Condition As String
Get
Return laCondition
End Get
Set(ByVal Value As String)
If laCondition <> Value Then
laCondition = Value
GenerePropertyChanged("Condition")
End If
End Set
End Property
Private caseAcocher As Boolean
'' <summary>
'' Propriété correspondant au checkbox
'' </summary>
Public Property Coche As Boolean
Get
Return caseAcocher
End Get
Set(ByVal Value As Boolean)
If caseAcocher <> Value Then
If Condition = "A" Then 'on vérifie la condition, le champ n'est mis à jour que si elle est ok
caseAcocher = Value
End If
'qu'elle soit bonne ou pas on signale au binding un changement, ainsi la coche dans le datagridview sera effacée si besoin
GenerePropertyChanged("Coche")
End If
End Set
End Property
#Region "INotifyPropertyChanged"
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private Sub GenerePropertyChanged(ByVal Propriete As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Propriete))
End Sub
#End Region
End Class
Dans le formulaire, d'abord on charge la liste et on l'affiche
Private lesDonnees As List(Of LaClassDeScn) = New List(Of LaClassDeScn) 'déclaration de la collection
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'pour l'exemple, je crée une liste de LaClassDeScn en dur dans le code.
'si tu optes pour cette méthode, tu créeras cette liste à partir de ta base de données, en boucle au lieu de charger le datagridview
lesDonnees.Add(New LaClassDeScn(DateTime.Parse("01/09/2019"), 40.9, "Konichiwa"))
lesDonnees.Add(New LaClassDeScn(DateTime.Parse("01/09/2019"), 27.3, "Coucou"))
lesDonnees.Add(New LaClassDeScn(DateTime.Parse("01/09/2019"), 30.5, "Hello"))
lesDonnees.Add(New LaClassDeScn(DateTime.Parse("01/08/2019"), 17.4, "A"))
lesDonnees.Add(New LaClassDeScn(DateTime.Parse("01/08/2019"), 38.1, "Hallo"))
lesDonnees.Add(New LaClassDeScn(DateTime.Parse("01/08/2019"), 6, "Guten tag"))
'ici on on affecte la liste comme source de donnée du bindingSource
LaClassDeScnBindingSource.DataSource = lesDonnees 'pour l'affichage par défaut rien d'autre à faire
Ensuite dans un bouton, on mets la ligne de code pour le tri
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'tri par date croissante, puis par CA décroissant
LaClassDeScnBindingSource.DataSource = lesDonnees.OrderBy(Function(x) x.MaDate).ThenByDescending(Function(x) x.CA) 'et ya rien d'autre à faire End Sub
End Sub
On lance l'application et ceci s'affiche
Si je clique sur une case à cocher dont la propriété Condition ne vaut pas "A", on voir le petit crayon en début de ligne, la case est cochée
Si je change de case, pour cloturer la saisie, la case est décochée
A l'inverse pour la ligne où Condition vaut "A", ça reste coché
Et quand on clique sur le bouton de tri, la coche est toujours active