IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Objet métier, Datatable, BindingSource et DataGridView [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Objet métier, Datatable, BindingSource et DataGridView
    Bonjour à tous,
    Je suis de retour pour améliorer mon programme qui fonctionne très bien mais avec quelques petites lacunes dans le code que je voudrais améliorer.
    Par contre cela fait plus d'un an que je n'ai pas programmé et je peine un peu pour m'y remettre...j'espère que vous pourrez m'aider...

    Pour faire simple mon programme utilise les objets que je cite dans le titre et sont tous rattachés à l'aide d'un Binding source.
    Prenons un exemple pour bien comprendre mon problème :
    J'ai un objet métier qui fourni une note de 0 à 5 pour chaque ligne de mon Datatable. Puisque tout est "liés", cette note s'affiche de manière automatique sous forme de chiffre dans une colonne du dgv. Indépendamment de ces liaisons automatique j'ai aussi une autre colonne qui affiche la note sous forme d'image (0 à 5 étoiles).

    Aujourd'hui c'est une procédure qui se charge d'afficher ces images par exemple au moment du démarrage du programme en parcourant bêtement les lignes une à une. Mais cela s’exécute à la demande dans le code. J'imagine que pour bien faire il faudrait que l'objet métier signale lui-même un changement pour chaque propriété pour pouvoir mettre à jour de manière automatique le dgv. Est ce la bonne manière de faire et comment ? Est ce qu'il faut lever un évent dans chaque propriété de ma classe métier ? Que dois je faire passer comme arguments de l'évent ? C'est aussi une question globale qui me servira à retravailler complétement l'architecture de mon programme.

    Inversement, quand je modifie la note depuis le dgv, je mets à jour mon objet métier à l’intérieur de CellValueChanged du Dgv. Il me semble que le bindingsource est aussi capable de lever le même type d’événement. Vous pouvez confirmer mon petit doute et m'aiguiller un peu sur le bon évent à utiliser ? Et est ce que cela na va pas faire une référence circulaire ? : (Mon objet métier met à jour l'UI qui met à jour l'objet métier....etc )

    Disons que je voudrais vraiment partir sur de bonnes bases avant de retoucher quoi que ce soit à mon code pour faire les bons choix dés le départ...
    Merci beaucoup par avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Rebonsoir,
    Désolé si je ne sais pas exprimer précisément ce que je voudrais, ce sera plus simple si je copie/colle le bout de programme tel qu'il est exactement :
    Mon objet métier s'appelle Cars1, pour le reste je pense que les noms sont assez évocateur.
    Très franchement j'ai de grosses charges de boulot en ce moment et avec la fatigue je rate peut-être un truc peut-être évident, en tout cas je me dit que ce n'est pas normale de parcourir toutes les lignes une à une. Toutes vos remarques et avis sont les bienvenues.


    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
      Private Sub DataGridViewCars_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridViewCars.CellValueChanged
            If IsLoadingUICars Then Exit Sub
     
            Dim Row As DataGridViewRow = DataGridViewCars.CurrentRow
            Dim ColName As String = DataGridViewCars.Columns(e.ColumnIndex).Name
            Dim CarName As String = CStr(DataGridViewCars.CurrentRow.Cells(DicoColsCars(EnumCol.Name).Name).Value)
     
            'Dim Value As Object
            'If IsDBNull(DataGridViewCars.CurrentCell.Value) Then
            '    Value = Nothing
            'Else
            '    Value = DataGridViewCars.CurrentCell.Value
            'End If
     
            Dim Value As Object
            If IsDBNull(DataGridViewCars.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) Then
                Value = Nothing
            Else
                Value = DataGridViewCars.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
            End If
     
            Select Case ColName
                Case DicoColsCars(EnumCol.Selec).Name
                    Cars1(CarName).Selected = CBool(Value)
                    'If CBool(Value) = True Then
                    '    countCarsSelected += 1
                    'Else
                    '    countCarsSelected -= 1
                    'End If
     
                Case DicoColsCars(EnumCol.Dépendance).Name
                    Dim DepCar As String = CStr(Value)
                    If DepCar = CarName Then
                        MessageBox.Show("La dépendance ne peux pas dépendre d'elle même !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        DataGridViewCars.CurrentCell.Value = Nothing
                        Exit Sub
                    End If
                    If DepCar IsNot Nothing Then
                        If DepCarsByCar.ContainsKey(CarName) Then
                            DepCarsByCar(CarName).DepName = DepCar
                        Else
                            DepCarsByCar.Add(CarName, New Dependance(CarName, DepCar))
                        End If
                        RebuildDepCarsByDepCar()
                    End If
     
                    'Dim Dep As Dependance = DepCarsByCar(CarName)
                    'If DepCarsByDepCar.ContainsKey(DepCar) Then
                    '    Dim Liste As List(Of Dependance) = DepCarsByDepCar(DepCar)
                    '    Liste.Add(Dep)
                    'Else
                    '    Dim List As New List(Of Dependance)
                    '    List.Add(Dep)
                    '    DepCarsByDepCar.Add(DepCar, List)
                    'End If
                    Cars1(CarName).Dépendance = DepCar
     
                Case DicoColsCars(EnumCol.Note).Name
                    Dim Note As Integer = CInt(Value)
                    If NotesCars.ContainsKey(CarName) Then
                        NotesCars(CarName).Note = Note
                    Else
                        NotesCars.Add(CarName, New Note(CarName, Note))
                    End If
                    Cars1(CarName).Note = Note
     
                Case DicoColsCars(EnumCol.Commentaires).Name
                    Dim Com As String = CStr(Value)
                    If ComsCars.ContainsKey(CarName) Then
                        ComsCars(CarName).Commentaire = Com
                    Else
                        ComsCars.Add(CarName, New Com(CarName, Com))
                    End If
                    Cars1(CarName).Commentaire = Com
                Case DicoColsCars(EnumCol.Catégorie).Name
                    Cars1(CarName).Catégorie = CStr(Value)
                    'If Not ListCatégoriesCars.Contains(Cars(CarName).Catégorie) Then
                    '    DataGridViewCars(e.ColumnIndex, e.RowIndex).ErrorText = String.Format("La catégorie n'existe pas : {0}", Cars(CarName).Catégorie)
                    '    DataGridViewCars(e.ColumnIndex, e.RowIndex).Value = Nothing
                    'Else
                    '    DataGridViewCars.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = Nothing
                    'End If
                Case DicoColsCars(EnumCol.Marque).Name
                    Cars1(CarName).Marque = CStr(Value)
                Case DicoColsCars(EnumCol.Modele).Name
                    Cars1(CarName).Modele = CStr(Value)
                Case DicoColsCars(EnumCol.Classe).Name
                    Cars1(CarName).Classe = CStr(Value)
                Case DicoColsCars(EnumCol.Motricité).Name
                    Cars1(CarName).Motricité = CStr(Value)
                Case DicoColsCars(EnumCol.Boite).Name
                    Cars1(CarName).Boite = CStr(Value)
                Case DicoColsCars(EnumCol.Puissance).Name
                    Cars1(CarName).Puissance = CStr(Value)
                Case DicoColsCars(EnumCol.Couple).Name
                    Cars1(CarName).Couple = CStr(Value)
                Case DicoColsCars(EnumCol.Vitesse).Name
                    Cars1(CarName).Vitesse = CStr(Value)
                Case DicoColsCars(EnumCol.Accélération).Name
                    Cars1(CarName).Accélération = CStr(Value)
                Case DicoColsCars(EnumCol.RatioPW).Name
                    Cars1(CarName).RatioPW = CStr(Value)
                Case DicoColsCars(EnumCol.Rang).Name
                    'Dim txt As String
                    'Dim i As Integer? = txt.ToNullable(Of Integer)()
                    'Integer.TryParse(txt, i)
                    'Value = Nothing
                    'If Value Is Nothing Then
                    '    Cars(CarName).Rang = Nothing
                    'Else
                    '    Cars(CarName).Rang = Integer.Parse(CStr(Value))
                    'End If
                    'If Cars(CarName).Rang.HasValue Then Stop
                    'Value = Nothing
                    'Cars(CarName).Rang = If(Value Is Nothing, Nothing, Integer.Parse(CStr(Value)))
                    'Cars(CarName).Rang = CType(If(Value Is Nothing, Nothing, Nothing), Integer?)
                    'Cars(CarName).Rang = If(Value Is Nothing, CType(Nothing, Integer?), Integer.Parse(CStr(Value)))
                    Cars1(CarName).Rang = CStr(Value).ToNullable(Of Integer)()
     
                    'Cars(CarName).Rang = Nothing ' 
                    'If Cars(CarName).Rang.HasValue Then Stop
                Case DicoColsCars(EnumCol.Boite).Name
                    Cars1(CarName).Boite = CStr(Value)
                Case DicoColsCars(EnumCol.User1).Name
                    Cars1(CarName).User1 = CStr(Value)
            End Select
            dgvCarsErrorText(DataGridViewCars.Rows(e.RowIndex).Cells(e.ColumnIndex))
            SetUIDataGridViewRowCar(CarName, Row)
     
        End Sub
    La fameuse procédure qui charge les données et qui actualise l'affichage de certaines colonnes dont les fameuses images pour les notes grâce à "SetUIDataGridViewRowCar".
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
       Public Sub RefreshDataUICars()
            IsLoadingUICars = True
            'countCarsSelected = 0
            If dtCars.Rows.Count <= 0 Then Exit Sub
            For Each Row As DataRow In dtCars.Rows
                Dim CarName As String = CStr(Row(DicoColsCars(EnumCol.Name).Name))
                UpdateCarRow(CarName, Row)
            Next
            SetUIDataGridViewCars()
     
            IsLoadingUICars = False
        End Sub
     
        Private Sub UpdateCarRow(CarName As String, Row As DataRow)
            Dim Location As String = Cars1(CarName).CurrentEmplacement.ToString
            Row(DicoColsCars(EnumCol.Name).Name) = CarName
            Row(DicoColsCars(EnumCol.Type).Name) = If(Cars1(CarName).Original, "Originale", "Mod")
            Row(DicoColsCars(EnumCol.Stocké).Name) = If(Cars1(CarName).EnStock, "Oui", "Non")
            Row(DicoColsCars(EnumCol.Emplacement).Name) = Location
            Row(DicoColsCars(EnumCol.Statut).Name) = If(Cars1(CarName).Activé, "Activé", "Désactivé")
            Row(DicoColsCars(EnumCol.NewContent).Name) = If(Cars1(CarName).NewContent, "Oui", "Non")
            If Options.CalculFolderSize Then Row(DicoColsCars(EnumCol.Taille).Name) = Cars1(CarName).FolderSize
            Row(DicoColsCars(EnumCol.Dépendance).Name) = Cars1(CarName).Dépendance
            'Row(dgvCols.Ico.Name) = If(Cars(CarName).Activé, My.Resources.status, My.Resources.status_away)
     
            Row(DicoColsCars(EnumCol.Note).Name) = Cars1(CarName).Note
            Row(DicoColsCars(EnumCol.Commentaires).Name) = Cars1(CarName).Commentaire
            Row(DicoColsCars(EnumCol.Catégorie).Name) = Cars1(CarName).Catégorie
            Row(DicoColsCars(EnumCol.Marque).Name) = Cars1(CarName).Marque
            Row(DicoColsCars(EnumCol.Modele).Name) = Cars1(CarName).Modele
            Row(DicoColsCars(EnumCol.Classe).Name) = Cars1(CarName).Classe
            Row(DicoColsCars(EnumCol.Puissance).Name) = Cars1(CarName).Puissance
            Row(DicoColsCars(EnumCol.Couple).Name) = Cars1(CarName).Couple
            Row(DicoColsCars(EnumCol.Poids).Name) = Cars1(CarName).Poids
            Row(DicoColsCars(EnumCol.Vitesse).Name) = Cars1(CarName).Vitesse
            Row(DicoColsCars(EnumCol.Accélération).Name) = Cars1(CarName).Accélération
            Row(DicoColsCars(EnumCol.RatioPW).Name) = Cars1(CarName).RatioPW
            Row(DicoColsCars(EnumCol.Rang).Name) = Cars1(CarName).Rang ' If(Cars(CarName).Rang.HasValue, CInt(Cars(CarName).Rang), DBNull.Value)
            Row(DicoColsCars(EnumCol.Motricité).Name) = Cars1(CarName).Motricité
            Row(DicoColsCars(EnumCol.Boite).Name) = Cars1(CarName).Boite
            Row(DicoColsCars(EnumCol.User1).Name) = Cars1(CarName).User1
            Row(DicoColsCars(EnumCol.Selec).Name) = Cars1(CarName).Selected
        End Sub
     
        Private Sub SetUIDataGridViewCars()
            If DataGridViewCars.Rows.Count <= 0 Then Exit Sub
            For Each Row As DataGridViewRow In DataGridViewCars.Rows
                Dim CarName As String = CStr(Row.Cells(DicoColsCars(EnumCol.Name).Name).Value)
                SetUIDataGridViewRowCar(CarName, Row)
            Next
            DataGridViewCars.Refresh()
        End Sub
     
        Private Sub SetUIDataGridViewRowCar(CarName As String, Row As DataGridViewRow)
            IsLoadingUICars = True
            'Dim Location As String = Cars(CarName).CurrentLocation.ToString
            Dim Cell As DataGridViewCell = Row.Cells(DicoColsCars(EnumCol.Selec).Name)
            Dim chkCell As DataGridViewCheckBoxCell = CType(Cell, DataGridViewCheckBoxCell)
            Dim cbCol As DataGridViewComboBoxColumn = CType(DataGridViewCars.Columns(DicoColsCars(EnumCol.Dépendance).Name), DataGridViewComboBoxColumn)
            Dim cbCell As DataGridViewComboBoxCell = CType(Row.Cells(DicoColsCars(EnumCol.Dépendance).Name), DataGridViewComboBoxCell)
     
            If Cars1(CarName).Locked Then
                chkCell.ReadOnly = True
                'chkCell.ThreeState = True
                'chkCell.Value = 2
                'chkCell.Value = True
                chkCell.FlatStyle = FlatStyle.Flat
                'chkCell.Style.BackColor = Color.Gray
                chkCell.Style.ForeColor = Color.DarkGray
                cbCell.ReadOnly = True
            Else
                Row.DefaultCellStyle.BackColor = Nothing
                chkCell.ReadOnly = False
                cbCell.ReadOnly = False
            End If
     
            If Cars1(CarName).NewContent Then
                Row.DefaultCellStyle.ForeColor = Options.ColorNewContent
                Row.DefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Bold)
            Else
                Row.DefaultCellStyle.ForeColor = Nothing
                Row.DefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Regular)
            End If
     
            If Cars1(CarName).CurrentEmplacement = Emplacement.ACFolder AndAlso Cars1(CarName).EnStock Then
                ' Dossier Double
                'Location = "Double"
                Row.DefaultCellStyle.BackColor = Options.ColorInvalide
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.Désinstallé Then
                ' Voiture indisponible
                Row.DefaultCellStyle.ForeColor = Options.ColorDésinstallé
                Row.DefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Italic)
            ElseIf Cars1(CarName).Original Then
                ' Voiture originale
                Row.DefaultCellStyle.BackColor = Options.ColorOriginal
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.ACFolder AndAlso Not Cars1(CarName).EnStock Then
                ' Dossier AcFolder
                Row.DefaultCellStyle.BackColor = Options.ColorModAcFolder
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.LinkedToACTools AndAlso Not Cars1(CarName).EnStock Then
                ' Ce cas n'arrive jamais puisque les jonctions orphelines LinkedToACTools sont ignorées au demmarrage
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.LinkedToACTools AndAlso Cars1(CarName).EnStock Then
                ' Cas normal
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.LinkedToOthers AndAlso Not Cars1(CarName).EnStock Then
                ' Interdiction de toucher à la jonction Other si le contenu n'est pas en Stock
                Row.DefaultCellStyle.BackColor = Options.ColorLinkToOtherLocked
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.LinkedToOthers AndAlso Cars1(CarName).EnStock Then
                ' Si contenu présent dans ACTools on peux désactiver J-ACMan (En Option)
                If Options.EnabledLinkToOther Then
                    Row.DefaultCellStyle.BackColor = Options.ColorLinkToOtherEnStockEnabled
                Else
                    Row.DefaultCellStyle.BackColor = Options.ColorLinkToOtherEnStockDisabled
                End If
            Else
                ' Cas normal
            End If
     
            'Row.Cells(dgvCols.Location.Name).Value = Location ' ***************************************************************
            Dim Icone As Bitmap
            If Cars1(CarName).Invalide Then
                Icone = My.Resources.status_busy
            ElseIf Cars1(CarName).CurrentEmplacement = Emplacement.Désinstallé Then
                Icone = My.Resources.status_away
            ElseIf Cars1(CarName).Activé Then
                Icone = My.Resources.status
            Else
                Icone = My.Resources.status_offline
            End If
            Row.Cells(DicoColsCars(EnumCol.Ico).Name).Value = Icone
            Dim Note As Integer = Cars1(CarName).Note
            Dim img As Image = Nothing
            Select Case Note
                Case 1
                    img = My.Resources.étoile1_64x14_
                Case 2
                    img = My.Resources.étoile2_64x14_
                Case 3
                    img = My.Resources.étoile3_64x14_
                Case 4
                    img = My.Resources.étoile4_64x14_
                Case 5
                    img = My.Resources.étoile5_64x14_
                Case Else
                    img = My.Resources.étoile0_64x14_
            End Select
            Row.Cells(DicoColsCars(EnumCol.imgNote).Name).Value = img
     
            IsLoadingUICars = False
        End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Rebonsoir,
    Je commence à y voir un peu mieux dans mon code et j'aurais une question toute simple :
    Je cherche un événement du DatagridView qui se produit lorsque je charge les données dans ma Datatable. Le "CellValueChanged" ne se lève uniquement lorsque j'édite les cellules du dgv à la main.
    Je voudrais m'en servir pour afficher les images dans la colonne "imgNote" du dgv dés que la colonne "Note" qui contient les notes sous forme de chiffre change.

    J'ai testé "CellFormating" mais j'obtiens un petit clignotement désagréable, pas mieux pour l’événement "paint" surtout quand celui-ci doit effectuer beaucoup de mises en forme.

    Un petit extrait de l'évenement CellFormatting :
    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
      Private Sub DataGridViewCars_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridViewCars.CellFormatting
            If e.ColumnIndex < 0 Then Exit Sub
            Dim dgv As DataGridView = CType(sender, DataGridView)
            Dim Col As String = DataGridViewCars.Columns(e.ColumnIndex).Name
            Select Case Col
                Case DicoColsCars(EnumCol.Emplacement).Name
                    Case DicoColsCars(EnumCol.Note).Name
                    Dim Note As Integer = CInt(e.Value)
                    Dim img As Image = Nothing
                    Select Case Note
                        Case 1
                            img = My.Resources.étoile1_64x14_
                        Case 2
                            img = My.Resources.étoile2_64x14_
                        Case 3
                            img = My.Resources.étoile3_64x14_
                        Case 4
                            img = My.Resources.étoile4_64x14_
                        Case 5
                            img = My.Resources.étoile5_64x14_
                        Case Else
                            img = My.Resources.étoile0_64x14_
                    End Select
                    dgv.Rows(e.RowIndex).Cells(DicoColsCars(EnumCol.imgNote).Name).Value = img
     
            End Select
        End Sub
    Merci à vous.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour, je clôture ce post. Merci pour votre patience...

    J'ai commencé par utiliser les bons événements du Datagridview (CellFormating pour mettre en forme les cellules et RowPostPaint pour les lignes). Pour l'histoire du clignotement je l'ai résolu comme ceci :

    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
      Private Sub DataGridViewCars_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridViewCars.CellFormatting
            If e.ColumnIndex < 0 Then Exit Sub
            Dim dgv As DataGridView = CType(sender, DataGridView)
            Dim oCarName As Object = dgv.Rows(e.RowIndex).Cells(DicoColsCars(EnumCol.Name).Name).Value
            Dim CarName As String = If(IsDBNull(oCarName), Nothing, CStr(oCarName))
            If CarName Is Nothing Then Exit Sub
     
            Dim Col As String = dgv.Columns(e.ColumnIndex).Name
            Dim dgvRow As DataGridViewRow = dgv.Rows(e.RowIndex)
     
            Select Case Col
                Case DicoColsCars(EnumCol.imgNote).Name
                    Dim Note As Integer = Cars1(CarName).Note
                    Dim img As Image = Nothing
                    Select Case Note
                        Case 1
                            img = My.Resources.étoile1_64x14_
                        Case 2
                            img = My.Resources.étoile2_64x14_
                        Case 3
                            img = My.Resources.étoile3_64x14_
                        Case 4
                            img = My.Resources.étoile4_64x14_
                        Case 5
                            img = My.Resources.étoile5_64x14_
                        Case Else
                            img = My.Resources.étoile0_64x14_
                    End Select
                    e.Value = img
            End Select
        End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 03/07/2009, 13h37
  2. BindingSource.Find + Objet Métier
    Par robri dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/05/2008, 13h32
  3. Conseils sur la méthode de développement objet métier
    Par RamDevTeam dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 18h14
  4. [DAO] Faire le lien entre les VO et les Objets Métiers
    Par mauvais_karma dans le forum Hibernate
    Réponses: 12
    Dernier message: 25/11/2005, 15h19
  5. [Strategie]Classes de mapping & Objets métier
    Par yanis97 dans le forum JDBC
    Réponses: 19
    Dernier message: 16/05/2005, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo