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 :

Réaliser un planning en Datagridview avec cellpaint


Sujet :

VB.NET

  1. #21
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Re,

    Merci pour ta précision. Je vais étudier cela et essayer de comprendre comment cela tourne.
    J'ai juste une petite question : l'affectation à une salle est aléatoire ou bien c'est indiqué dans le Datagridview 2 ?
    Je dis cela car dans mon projet j'ai un datagridview1 ou est précisé la "salle" si je prends ton exemple ...

    Edit 1 : Et effectivement mes horaires ont des minutes style 12h47, etc .....

    Edit 2 : Est-t-il possible d'effectuer des chevauchements. Par exemple Nom1 et Nom2 sont dans la même salle et que çà trace sur deux lignes mais pour la même salle ?

  2. #22
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    re

    Est-t-il possible d'effectuer des chevauchements. Par exemple Nom1 et Nom2 sont dans la même salle et que çà trace sur deux lignes mais pour la même salle
    Pour répondre à cette question ,il faut être devin ,puisque je ne connais pas la structure de ta table ...

  3. #23
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Hello MABROUKI,

    J'ai un Datagridview2 d'une dizaine de colonnes qui est alimenté par une Base Access en utilisant ce principe :
    https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx

    Si je reste dans l'exemple des salles :

    - La 1ère colonne est le nom de la personne
    - La 3ème colonne est la date et l'heure d'arrivée
    - La 7ème colonne est le numéro de la salle
    - La 13ème colonne est la date et l'heure de départ

    Cela peut donner par exemple :

    Nom1 arrive à 07h47 le jour J dans salle 1 et repart à 10h30 le jour J
    Nom2 arrive à 08h00 le jour J dans salle 2 et repart à 11h45 le jour J
    Nom3 arrive à 07h47 le jour J dans salle 1 et repart à 09h30 le jour J
    Nom4 arrive à 14h00 le jour J dans salle 3 et repart à 05h00 J+1
    Nom5 est arrivée J-1 à 20h00 dans salle 4 et repart à 06h00 le jour J
    Nom6 est arrivée J-3 à 17h00 dans salle 5 et repart à 16h00 J+1

    Sur mon form principal, l'utilisateur choisit une date via un DatetimePicker et je filtre mon tableau Datagridview2 en utilisant :
    en affichant pour un jour J :

    - Les données de ceux arrivées et partis le jour J
    - Les données de ceux arrivées le jour J et partant après J
    - Les données de ceux arrivées avant J et partant le jour J
    - Les noms de ceux arrivées avant J et partant après J (Dans ce cas là la salle est occupé par cette utilisateur toute la journée)

  4. #24
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    rebonjour
    Etant donné que ton DataTable est structuré suivant le Champ Nom ,la situation se presente sous un mauvais jour , vu que tu veux que ton "diagram" soit structuré suivant le Champ NumeroSalle....
    Pour pallier à cela il faut :
    - une table parente maSalle à créer "en vol" ou le champ NumeroSalle pointe sur les champs enfants Nom (occupants)...
    -un DataSet designé ci-après qui gère la Relation ParentSalleTable-ChildNomTable désigné ci-après par relTableSalle
    L'accès aux 2 tables (maTable et maSalle) se fait toujours via le Dataset et l'index string (autrement dit le nom de table )....

    Moyennant cet aménagement les rows sont ajoutés au DataGridView1 suivant le nombre de lignes de la table maSalle..
    Dans l'event CellPaint le seul changement c'est la naviguation dans chaque ligne de la table maSalle cette fois-ci et grace à la relation on récupéré les lignes "enfants" de la table maTable...et les peindre ...

    code .vb revu (a copier et exécuter pour comprendre ce qu'il fait):


    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
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
     
     
    Public Class FormGantDGVSalle
     
        Private monDataSet As New DataSet
        Private relTableSalle As DataRelation = Nothing
     
        Private ColorColums() As Color
        Private Sub FormGantDGVSalle_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.DataGridView1.Dock = DockStyle.Top
            Me.DataGridView2.Dock = DockStyle.Bottom         'ajout colonnes
            'Fill la table  "maTable"
            GetData()
     
            'Cree la table "maSalle"
            CreateTableSalle()
     
     
            'Cree la  relation parent-child salle =>table
            CreateRelationSalleTable()
     
            'Ce 2eme DataGridView sert à afficher les donnees de la table maTable
            'trie suivant colonne Salle
            Dim view As DataView = monDataSet.Tables("maTable").DefaultView
            view.Sort = "NumeroSalle ASC"
            DataGridView2.DataSource = view
     
     
     
     
            For I As Integer = 0 To 23
                If I >= 0 And I <= 9 Then
                    Me.DataGridView1.Columns.Add("Heure" + I.ToString(), "0" & I & "h")
                Else
                    Me.DataGridView1.Columns.Add("Heure" + I.ToString(), I & "h")
                End If
                Me.DataGridView1.Columns.Add("Minute10", "10")
                Me.DataGridView1.Columns.Add("Minute20", "20")
                Me.DataGridView1.Columns.Add("Minute30", "30")
                Me.DataGridView1.Columns.Add("Minute40", "40")
                Me.DataGridView1.Columns.Add("Minute50", "50")
            Next I
     
     
            'format colonnes
            For I As Integer = 0 To Me.DataGridView1.ColumnCount - 1
                If Me.DataGridView1.Columns(I).HeaderCell.Value Like "*h" Then
                    'TableGrapheDataGridView.Columns(I).HeaderCell.Style.BackColor = Color.LightGray
                    Me.DataGridView1.Columns(I).HeaderCell.Style.Font = New Font("Arial", 12, FontStyle.Bold)
                End If
            Next I
            For Each _col As DataGridViewColumn In Me.DataGridView1.Columns
                _col.SortMode = DataGridViewColumnSortMode.NotSortable
            Next
     
            'ajout lignes
            Me.DataGridView1.TopLeftHeaderCell.Value = "Salle"
            Me.DataGridView1.Rows.Add()
            Me.DataGridView1.Rows(0).MinimumHeight = 20
            Me.DataGridView1.Rows(0).HeaderCell.Value = "Batiment 1"
            For ZZ As Integer = 0 To Me.DataGridView1.Columns.Count - 1
                Me.DataGridView1.Item(ZZ, 0).Style.BackColor = Color.LightGray
            Next ZZ
     
            'ajout des lignes de la table "maSalle" au  DataGridView1
            For Each item As DataRow In monDataSet.Tables("maSalle").Rows
                Dim N As Integer = Me.DataGridView1.Rows.Add()
                Me.DataGridView1.Rows(N).MinimumHeight = 30
                Me.DataGridView1.Rows(N).HeaderCell.Value = item(0).ToString
            Next
     
     
     
            'Fill array de couleurs 
            FillColorColums(DataGridView1)
     
     
     
        End Sub
     
        Private rnd As New Random
        Private Sub GetData()
            Dim maTable As New DataTable("maTable")
            Dim colNom, colDateArrivee, colDateDepart, colSalle As DataColumn
            colNom = New DataColumn("Nom", GetType(String))
            colDateArrivee = New DataColumn("DateArrivee", GetType(DateTime))
            colDateDepart = New DataColumn("DateDepart", GetType(DateTime))
            colSalle = New DataColumn("NumeroSalle", GetType(Integer))
            maTable.Columns.Add(colNom)
            maTable.Columns.Add(colDateArrivee)
            maTable.Columns.Add(colDateDepart)
            maTable.Columns.Add(colSalle)
            Dim XDateArrive As Date = Date.Now
            Dim XDateDepart As Date
            Dim heure, minute As Integer
     
            Dim dr As DataRow = maTable.NewRow
     
            For i As Integer = 0 To 19
                dr(0) = "Nom" + (i + 1).ToString
     
                heure = rnd.Next(6, 23)
                minute = rnd.Next(30, 60)
                XDateArrive = XDateArrive.AddHours(heure)
                XDateArrive = XDateArrive.AddMinutes(minute)
     
                heure = rnd.Next(6, 23)
                minute = rnd.Next(30, 60)
                XDateDepart = XDateArrive.AddHours(heure)
                XDateDepart = XDateArrive.AddMinutes(minute)
     
                If XDateDepart < XDateArrive Then
                    Dim temp As Date = XDateDepart
                    XDateDepart = XDateArrive
                    XDateArrive = temp
                End If
     
                dr(1) = XDateArrive
                dr(2) = XDateDepart
                dr(3) = rnd.Next(1, 10)
     
                maTable.Rows.Add(dr)
                dr = maTable.NewRow
            Next
     
            monDataSet.Tables.Add(maTable)
     
        End Sub
        Private Sub CreateTableSalle()
     
     
            Dim view As DataView = monDataSet.Tables("maTable").DefaultView
            view.Sort = "NumeroSalle ASC"
     
            Dim maSalle As New DataTable("maSalle")
            Dim colSalle As DataColumn
            colSalle = New DataColumn("NumeroSalle", GetType(Integer))
            maSalle.Columns.Add(colSalle)
     
            Dim ligne As Integer = 0
            Dim numero As Integer = view(ligne).Item(3)
            Dim currentNumero As Integer = -1
            Dim dr As DataRow = maSalle.NewRow
            Do
                If numero <> currentNumero Then
                    dr(0) = numero
                    maSalle.Rows.Add(dr)
                    dr = maSalle.NewRow
                    currentNumero = numero
                End If
     
                ligne += 1
                numero = view(ligne).Item(3)
            Loop Until ligne = view.Count - 1
            monDataSet.Tables.Add(maSalle)
        End Sub
        Private Sub CreateRelationSalleTable()
            Dim parentColumn As DataColumn = monDataSet.Tables("maSalle").Columns("NumeroSalle")
            Dim childColumn As DataColumn = monDataSet.Tables("maTable").Columns("NumeroSalle")
     
            ' Create DataRelation.
            relTableSalle =
                New DataRelation("TableSalle", parentColumn, childColumn, False)
            monDataSet.Relations.Add(relTableSalle)
     
     
        End Sub
        Private Sub FillColorColums(ByVal dgv As DataGridView)
            ColorColums = New Color(dgv.Rows.Count) {}
            Dim rndColor As New Random
            For i As Integer = 0 To dgv.RowCount - 1
                ColorColums(i) = Color.FromArgb(100, rndColor.Next(0, 256), rndColor.Next(0, 256), rndColor.Next(0, 256))
            Next
     
     
     
        End Sub
     
     
        Private nomItem As String = String.Empty
        Private myColor1 As Color = Color.Transparent
        Private colDebut, colFin As DateTime
        Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
            If monDataSet.Tables("maSalle") Is Nothing Then Return
            If (e.ColumnIndex >= 0 AndAlso e.RowIndex > 0) Then
     
                Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1,
                    e.CellBounds.Width - 4, e.CellBounds.Height - 4)
     
                Dim foreColorBrush As New SolidBrush(e.CellStyle.ForeColor)
                Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor)
                Dim gridBrush As New SolidBrush(Me.DataGridView1.GridColor)
                Dim gridLinePen As New Pen(gridBrush)
                Dim diagramPen As New Pen(Brushes.Red, 2.0)
                Try
     
                    ' Erase the cell.
                    e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
     
                    ' Draw the grid lines (only the right and bottom lines;
                    ' DataGridView takes care of the others).
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                        e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                        e.CellBounds.Bottom - 1)
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                        e.CellBounds.Top, e.CellBounds.Right - 1,
                        e.CellBounds.Bottom)
     
                    'recupere la couleur Background  de ColorColums
                    myColor1 = ColorColums(e.RowIndex)
     
                    'recupere le nom du datable
                    Dim salleRow As DataRow = monDataSet.Tables("maSalle").Rows(e.RowIndex - 1)
     
                    For Each row As DataRow In salleRow.GetChildRows(relTableSalle)
     
                        nomItem = row.Item(0).ToString()
     
                        'recupere colonne debut apres conversion des heures et minutes
                        'en abscisse colonne 
                        colDebut = row.Item(1)
                        Dim x1 As Integer = colDebut.Hour * 6
                        x1 += colDebut.Minute / 10
     
                        'recupere colonne fin (idem)
                        colFin = row.Item(2)
                        Dim x2 As Integer = colFin.Hour * 6
                        x2 += colFin.Minute / 10
                        If e.ColumnIndex >= x1 And e.ColumnIndex <= x2 Then  ' dans la plage ? 
                            e.CellStyle.BackColor = myColor1
                            backColorBrush.Color = myColor1
     
                            ' Fill  the background cell
                            e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
     
                            ' Draw the text content of the cell (1 seule fois)
                            If e.ColumnIndex = x1 + 1 Then
                                e.Graphics.DrawString(nomItem, e.CellStyle.Font,
                                foreColorBrush, e.CellBounds.X + 2, e.CellBounds.Y + 2,
                                 StringFormat.GenericDefault)
                            End If
     
                            ' Draw the bar diagram
                            Dim p0 As New Point
                            Dim p1 As New Point
                            p0.X = e.CellBounds.Left
                            p0.Y = e.CellBounds.Top + e.CellBounds.Height / 2
     
                            p1.X = e.CellBounds.Right
                            p1.Y = p0.Y
                            e.Graphics.DrawLine(diagramPen, p0, p1)
                        End If
                    Next
                    e.Handled = True
     
                Finally
                    gridLinePen.Dispose()
                    gridBrush.Dispose()
                    foreColorBrush.Dispose()
                    backColorBrush.Dispose()
                    diagramPen.Dispose()
                End Try
     
            End If
     
        End Sub
    End Class
    bon code...

  5. #25
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Re,

    Je vais tester ce nouveau code pour essayer de comprendre les interactions. Merci déjà pour ce que tu as fait.

    Etant donné que ton DataTable est structuré suivant le Champ Nom ,la situation se presente sous un mauvais jour , vu que tu veux que ton "diagram" soit structuré suivant le Champ NumeroSalle....
    Oui c'est cela. Je construit le Datagridview1 comme ton premier exemple avec les numéros de salles dans la première colonne.
    Mon Datagridview2 contient les informations de ma BDD. Actuellement, je faisais une boucle sur toutes les lignes d'une colonne précise (celle ou est indiqué le numéro de salle). Si je tombais sur un numéro de salle indiqué dans le Datagridview1, je récupérais alors les autres informations : le nom, date et heure d'arrivée et date et heure de départ. Puis je vérifiais les dates selon les 4 critères que j'ai mis à la fin de mon message précédent. Et seulement une fois ces conditions remplies, j'alimentais mon Datagridview1 pour la journée considéré avec des traits + les infos comme tu peux le voir sur un de mes précédents messages.
    Vu que tout est construit manuellement en dur, je te laisse deviner le nombre de lignes .... et le nombre de boucles....
    De plus pour les chevauchements, avant de remplir une ligne du Datagridview1, je vérifiais si le contenu était vide. Si ce n'était pas le cas, je reprenais le contenu, insérait un retour à la ligne et ajoutait la nouvelle ligne....

    Moyennant cet aménagement les rows sont ajoutés au DataGridView1 suivant le nombre de lignes de la table maSalle..
    J'ai un nombre prédéfini de salles. Donc je peux travailler avec le début de ton premier code. Tout le travail réside dans la construction des belles lignes au bon endroit en fonction du Datagridview2.

    Demain je vais m'y pencher dessus et te ferait savoir. Merci encore

  6. #26
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Hello,

    J'essaie d'exécuter ton exemple dans mon application via le clic d'un bouton que j'ai ajouté sur mon Form principal puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormGantDGV.ShowDialog()
    Le Form s'ouvre bien mais je rencontre à nouveau le soucis d'affichage .... Les tableaux restent vierges. Ai-je loupé un paramètre ?

  7. #27
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par IL-MAFIOSO Voir le message
    Hello,

    J'essaie d'exécuter ton exemple dans mon application via le clic d'un bouton que j'ai ajouté sur mon Form principal puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormGantDGV.ShowDialog()
    Le Form s'ouvre bien mais je rencontre à nouveau le soucis d'affichage .... Les tableaux restent vierges. Ai-je loupé un paramètre ?
    Hello, le Handles avait disparu sur le Load Je continue mon exploration ....

    _________________________________________________________________

    Hello MABROUKI,

    Pour l'instant je suis encore sur ton premier code ....
    Bon j'ai réussi à remplir le Datagridview2 avec ma base access .
    J'ai adapté le Datagridview1 avec comme première colonne :
    Batiment 1
    1
    2
    3
    Batiment 2
    4
    5
    6

    Dans leDatagridview2, la 5ème colonne contient les numéros de salle.
    A ce stade, le remplissage du Datagridview1 se fait mais sans respecter le numéro de salle. Il prend les lignes dans l'ordre.
    Je n'arrive pas à savoir à quel endroit je dois mettre une boucle pour qu'il dessine au bon endroit ...

    En fait, j'ai besoin d'une boucle que pour chaque ligne de la 5ème colonne du Datagridview2, il regarde si le numéro de salle existe dans le Datagridview1 et à ce moment là il dessine, sinon il ne doit rien faire et passer à la ligne suivante.

  8. #28
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Hello,

    Bon j'ai essayé comme çà dans le Sub Cellpaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'recupere le nom du datable
     
                nomItem = maTable.Rows(e.RowIndex - 1).Item(5).ToString()
    .....
     For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1
                    If DataGridView1.Rows(i).HeaderCell.Value = nomItem Then
     
                                          If e.ColumnIndex >= colDebut And e.ColumnIndex <= colFin Then  ' dans la plage ?
    Et çà marche pas
    Je dois faire cette boucle ailleurs ?

    Edit : Je rencontre aussi un autre petit soucis : J'ai une erreur sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomItem = maTable.Rows(e.RowIndex - 1).Item(5).ToString()
    Car l'évènement Cellpaint doit certainement commencer avant que le Private Sub FillTable(ByVal dt As DataTable) soit terminé...

  9. #29
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    rebonjour


    En fait, j'ai besoin d'une boucle que pour chaque ligne de la 5ème colonne du Datagridview2, il regarde si le numéro de salle existe dans le Datagridview1 et à ce moment là il dessine, sinon il ne doit rien faire et passer à la ligne suivante.
    Avec toi, le grand problème c'est que tu continue à me sortir le seul code que tu connaisses soit le For Each ....Next....
    Ce que tu ne comprends pas c'est que le For Each ne peut pas résoudre le problème posé......
    C'est pour cela que tu dois apprendre autre chose :les Collection(of T) et les List(of T)...
    Exemple1 ataGridView.Rows est un Collection(of DataGridViewRow) mais qui permet peu de choses à part trouver une ligne du Dgv par son index...
    Exemple2 : à partir de la collection DataGridView.Rows on peut dériver par une ligne de code un List(of DataGridViewRow)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     Dim ListRows As List(Of DataGridViewRow) = DataGridView2.Rows.Cast(Of DataGridViewRow)().ToList
    Et ce qui est mirobolant avec cette liste ,c'est qu'on peut rechercher tous les dgvRows qui répondent à un critère (pour notre exemple ,rechercher tous les dgvRows qui ont dans la Cells(7) la valeur = 4,soit la 4eme salle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim ListRows As List(Of DataGridViewRow) = DataGridView2.Rows.Cast(Of DataGridViewRow)().ToList
     
     Dim childRows As List(Of DataGridViewRow) = ListRows.FindAll(Function(x) x.Cells(7).Value = e.RowIndex)
     
    'x est une variable qui veut dire un dgvRow et tu peux le nom que tu veux...
    'e.RowIndex c'est la ligne courante  du DGV2,soit le Numéro de salle
    Une fois la liste enfant obtenue ,tu fais un vulgaire For Each ...Next pour recuperer tes valeurs DateTime et peindre chaque Cell....e travail :


    voici le code revu (1er exemple ) qui fait le travail pour la 3eme et dernière fois :

    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
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
     
     
    Public Class FormGantDGVFinal
        Private maTable As DataTable
        Private ListRows As New List(Of DataGridViewRow)
        Private ColorColums() As Color
        Private Sub FormGantDGVFinal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.DataGridView1.Dock = DockStyle.Top
            Me.DataGridView2.Dock = DockStyle.Bottom
            'ajout colonnes
            For I As Integer = 0 To 23
                If I >= 0 And I <= 9 Then
                    Me.DataGridView1.Columns.Add("Heure" + I.ToString(), "0" & I & "h")
                Else
                    Me.DataGridView1.Columns.Add("Heure" + I.ToString(), I & "h")
                End If
                Me.DataGridView1.Columns.Add("Minute10", "10")
                Me.DataGridView1.Columns.Add("Minute20", "20")
                Me.DataGridView1.Columns.Add("Minute30", "30")
                Me.DataGridView1.Columns.Add("Minute40", "40")
                Me.DataGridView1.Columns.Add("Minute50", "50")
            Next I
     
     
            'format colonnes
            For I As Integer = 0 To Me.DataGridView1.ColumnCount - 1
                If Me.DataGridView1.Columns(I).HeaderCell.Value Like "*h" Then
                    'TableGrapheDataGridView.Columns(I).HeaderCell.Style.BackColor = Color.LightGray
                    Me.DataGridView1.Columns(I).HeaderCell.Style.Font = New Font("Arial", 12, FontStyle.Bold)
                End If
            Next I
            For Each _col As DataGridViewColumn In Me.DataGridView1.Columns
                _col.SortMode = DataGridViewColumnSortMode.NotSortable
            Next
     
            'ajout lignes
            Me.DataGridView1.TopLeftHeaderCell.Value = "Salle"
            Me.DataGridView1.Rows.Add()
            Me.DataGridView1.Rows(0).MinimumHeight = 20
            Me.DataGridView1.Rows(0).HeaderCell.Value = "Batiment 1"
            For ZZ As Integer = 0 To Me.DataGridView1.Columns.Count - 1
                Me.DataGridView1.Item(ZZ, 0).Style.BackColor = Color.AliceBlue
            Next ZZ
            For I As Integer = 1 To 6
                Me.DataGridView1.Rows.Add()
                Me.DataGridView1.Rows(I).MinimumHeight = 30
                Me.DataGridView1.Rows(I).HeaderCell.Value = I.ToString
            Next I
            'Fill table
            maTable = New DataTable
            FillTable(maTable)
     
     
     
     
     
            ' DataGridView2 est  affiché apres l'avoir trie par 
            'Numero de salle 
            Dim view As DataView = maTable.DefaultView
            view.Sort = "NumeroSalle ASC"
            DataGridView2.DataSource = view
     
            'Liste des Rows du DataGridView2
            ListRows = DataGridView2.Rows.Cast(Of DataGridViewRow)().ToList
            Dim liste As List(Of DataGridViewRow) = DataGridView2.Rows.Cast(Of DataGridViewRow)().ToList
            'Fill array de couleurs 
            FillColorColums(DataGridView2)
        End Sub
        Private rnd As New Random
        Private Sub FillTable(ByVal dt As DataTable)
     
            Dim colNom, colDateArrivee, colDateDepart, colSalle As DataColumn
            colNom = New DataColumn("Nom", GetType(String))
            colDateArrivee = New DataColumn("DateArrivee", GetType(DateTime))
            colDateDepart = New DataColumn("DateDepart", GetType(DateTime))
            colSalle = New DataColumn("NumeroSalle", GetType(Integer))
            dt.Columns.Add(colNom)
            dt.Columns.Add(colDateArrivee)
            dt.Columns.Add(colDateDepart)
            dt.Columns.Add(colSalle)
            Dim XDateArrive As Date = Date.Now
            Dim XDateDepart As Date
            Dim heure, minute As Integer
     
            Dim dr As DataRow = dt.NewRow
     
            For i As Integer = 0 To 19
                dr(0) = "Nom" + (i + 1).ToString
     
                heure = rnd.Next(6, 23)
                minute = rnd.Next(30, 60)
                XDateArrive = XDateArrive.AddHours(heure)
                XDateArrive = XDateArrive.AddMinutes(minute)
     
                heure = rnd.Next(6, 23)
                minute = rnd.Next(30, 60)
                XDateDepart = XDateArrive.AddHours(heure)
                XDateDepart = XDateArrive.AddMinutes(minute)
     
                If XDateDepart < XDateArrive Then
                    Dim temp As Date = XDateDepart
                    XDateDepart = XDateArrive
                    XDateArrive = temp
                End If
     
                dr(1) = XDateArrive
                dr(2) = XDateDepart
                dr(3) = rnd.Next(1, 10)
     
                dt.Rows.Add(dr)
                dr = dt.NewRow
            Next
     
        End Sub
        Private rndColor As New Random
        Private Sub FillColorColums(ByVal dgv As DataGridView)
            ColorColums = New Color(dgv.Rows.Count) {}
     
            For i As Integer = 0 To dgv.RowCount - 1
                ColorColums(i) = Color.FromArgb(100, rndColor.Next(50, 256), rndColor.Next(50, 256), rndColor.Next(50, 256))
            Next
        End Sub
        Private nomItem As String = String.Empty
        Private myColor1 As Color = Color.Transparent
        Private colDebut, colFin As DateTime
        Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
            If ListRows.Count = 0 Then Return
            If (e.ColumnIndex >= 0 AndAlso e.RowIndex > 0) Then
     
                Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1,
                    e.CellBounds.Width - 4, e.CellBounds.Height - 4)
     
                Dim foreColorBrush As New SolidBrush(e.CellStyle.ForeColor)
                Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor)
                Dim gridBrush As New SolidBrush(Me.DataGridView1.GridColor)
                Dim gridLinePen As New Pen(gridBrush)
                Dim diagramPen As New Pen(Brushes.Red, 2.0)
                Try
     
                    ' Erase the cell.
                    e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
     
                    ' Draw the grid lines (only the right and bottom lines;
                    ' DataGridView takes care of the others).
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                        e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                        e.CellBounds.Bottom - 1)
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                        e.CellBounds.Top, e.CellBounds.Right - 1,
                        e.CellBounds.Bottom)
     
                    'recupere la couleur Background  de ColorColums
                    myColor1 = ColorColums(e.RowIndex)
     
                    'recupere les colonnes enfants du DataGridView2  qui repondent au critere salle
                    Dim childRows As List(Of DataGridViewRow) = ListRows.FindAll(Function(x) x.Cells(3).Value = e.RowIndex)
     
                    For Each row As DataGridViewRow In childRows
     
                        nomItem = row.Cells(0).Value.ToString()
     
                        'recupere colonne debut apres conversion des heures et minutes
                        'en abscisse colonne 
                        colDebut = row.Cells(1).Value
                        Dim x1 As Integer = colDebut.Hour * 6
                        x1 += colDebut.Minute / 10
     
                        'recupere colonne fin (idem)
                        colFin = row.Cells(2).Value
                        Dim x2 As Integer = colFin.Hour * 6
                        x2 += colFin.Minute / 10
                        If e.ColumnIndex >= x1 And e.ColumnIndex <= x2 Then  ' dans la plage ? 
                            e.CellStyle.BackColor = myColor1
                            backColorBrush.Color = myColor1
     
                            ' Fill  the background cell
                            e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
     
                            ' Draw the text content of the cell (1 seule fois)
                            If e.ColumnIndex = x1 + 1 Then
                                e.Graphics.DrawString(nomItem, e.CellStyle.Font,
                                foreColorBrush, e.CellBounds.X + 2, e.CellBounds.Y + 2,
                                 StringFormat.GenericDefault)
                            End If
     
                            ' Draw the bar diagram
                            Dim p0 As New Point
                            Dim p1 As New Point
                            p0.X = e.CellBounds.Left
                            p0.Y = e.CellBounds.Top + e.CellBounds.Height / 2
     
                            p1.X = e.CellBounds.Right
                            p1.Y = p0.Y
                            e.Graphics.DrawLine(diagramPen, p0, p1)
     
                        End If
                    Next
                    e.Handled = True
     
                Finally
                    gridLinePen.Dispose()
                    gridBrush.Dispose()
                    foreColorBrush.Dispose()
                    backColorBrush.Dispose()
                    diagramPen.Dispose()
                End Try
     
            End If
     
     
     
     
     
     
     
        End Sub
    End Class
    Prends garde de me sortir le coup du Load et du Handles sinon je demanderais la suppression de ce post ....

  10. #30
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonjour MABROUKI,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Avec toi, le grand problème c'est que tu continue à me sortir le seul code que tu connaisses soit le For Each ....Next....
    Les choses doivent certainement pour toi être évidentes et elles peuvent l'être moins pour d'autres. Tu as raison, j'ai tendance à stagner sur des choses simples pour essayer de comprendre ce qui se passe dans la boucle et plus particulièrement dans le Sub Cellpaint par exemple.
    J'utilise déjà l'évènement Cellformatting pour changer la couleur de l'arrière plan en fonction du contenu des cellules dans une colonne spécifique et je comprends bien ce qu'il fait.
    J'ai pris connaissance de ton 3ème exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ListRows As List(Of DataGridViewRow) = DataGridView2.Rows.Cast(Of DataGridViewRow)().ToList
    J'ai une erreur concernant le mot Cast qui n'est pas un membre de system. ..... Je n'ai pas trouvé d'équivalent dans la liste déroulante que MVB me propose.

    Tes exemples me permettent d'essayer de comprendre comment cela fonctionne. Je connais très bien la charte de ce forum et ne demande un tout en un et simplement copier/coller dans mon code.
    En ce moment, je suis toujours sur ton premier exemple et le tord dans tous les sens pour voir ce qui se passe afin de mieux comprendre ce que chaque ligne fait. Je n'ai pas encore tout saisi mais des fois j'avance, des fois je stagne ... et des fois çà me prend la tête

  11. #31
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut

    J'ai une erreur concernant le mot Cast qui n'est pas un membre de system. ..... Je n'ai pas trouvé d'équivalent dans la liste déroulante que MVB me propose.
    si DataGridView2.Rows.Cast( n'apparait pas je n'y peux rien ...
    Tu n'as qu'à t'en prendre à toi-même !!!

  12. #32
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    'ai une erreur concernant le mot Cast qui n'est pas un membre de system. ..... Je n'ai pas trouvé d'équivalent dans la liste déroulante que MVB me propose.
    Forcément ton projet cible le framework 2.0 donc tu n'auras pas d'extension de méthode pour Cast...... ......

  13. #33
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonsoir,

    wallace1 :
    J'ai vérifié dans "Mon projet", "Paramètres avancés du compilateur" et il y a d'écrit :
    Framework cible (toutes les configurations) : .NET Framework 4 Client Profile
    Je pensais avoir pris le bon car de tout ce que j'ai essayé comme programmation, çà suffisait jusqu'à maintenant. Je vais essayer en le changeant et en prenant le .NET Framework 4 "Full" . Depuis le 4.5 il n'y a apparemment plus cette différence de version.

    MABROUKI :
    Tu n'as qu'à t'en prendre à toi-même !!!
    Qui a-t-il d'inscrit sur l'intitulé de mon Topic ? Débutant il me semble qui veut dire : " Qui débute, qui n'a pas d'expérience en la matière".
    Je ne t'ai jamais demandé un code clé en main. J'explique mon projet pour donner un fil comme vous le demandez souvent.
    Ma première référence en documentation est le cours de ce site d'ici et tout ce que je peux trouver sur MSDN essentiellement. Et il y en a des exemples...
    Mais qui pour un débutant comme moi ne sont pas tout le temps simple à comprendre pour pouvoir ensuite réutiliser telle ou telle fonction en l'adaptant à ce que je veux. Le cours VBnet d'ici explique en détail afin qu'un débutant comme moi ou pleins d'autres comprennent. Je n'ai pas besoin d'une personne qui me dit copie/colle cela dans ton projet mais de quelqu'un qui peut m'expliquer un peu + en détails . Je pensais le trouver sur ce forum et apparemment c'est le premier topic ou on me fait de telles remarques ....

    Depuis de nombreuses années, j'ai apporté mon aide et ma compétence et traiter des milliers de topics pour les débarrasser de divers malwares/virus/rootkits/ etc ... sur plusieurs forums très connus. Je suis même modérateur de l'un de ces forums. Je suis présent comme consultant sur de nombreux forums étrangers dont certains tu ne connais même pas l'existence et participe à ma manière à la lutte anti-malware. J'ai cotoyé et cotoie encore de grands développeurs d'outils de désinfections que vous utilisez au quotidien. J'ai développé il y a quelques années de cela un fix écrit en batch DOS qui a été téléchargé et utilisé des milliers de fois et que j'ai partagé dans de nombreux pays. Oui mon code était simple et j'aurais pu le raccourcir, le rendre plus beau si je le voulais mais il marchait et a été efficace pour éradiquer l'infection que je ciblais. J'ai été amené à les solliciter pour ajouter un module de recherche heuristique de fichiers. Ils l'ont fait et ont pris le temps de m'expliquer chaque détail de ce que ferait ce petit fichier et ce qu'il chercherait dans les innombrables lignes hexadécimales que contient un fichier. Car pondre un tel fichier est comme pondre un outil pour chercher un rootkit ...

    J'ai eu à aider des personnes à distance qui savaient à peine utiliser leurs ordinateurs alors que ces personnes allaient devoir faire des manips, manipuler des outils puissants ... A chaque topic, chaque utilisateur, je m'adaptais et pour certains les instructions étaient quasiment du pas à pas !
    Je n'ai jamais traiter une personne comme tu le fais depuis quelques topics avec moi.
    Quand une personne me demandait à quoi sert tel truc , je lui expliquait en me mettant à la portée de la personne
    Je suis aussi bénévole dans une association et donne des cours excel/word/internet à une génération qui découvrent l'ordinateur parce que leurs petits-enfants les ont convaincus d'en avoir un. Imagine toi leur degré de connaissances !! Et bien je prends le temps et s'il faut que je reste 20min pour leur expliquer comment formater une cellule excel, je le ferais ! Et s'ils reviennent la semaine suivante pour me dire si on peut le revoir, je le referais !
    Je n'ai pas 60 ans et n'ai non plus pas 20 ans !

    Concernant ce Topic, je cherchais à comprendre ce qui se trouve dans le Sub Cellpaint, c'est tout. Le reste je l'ai compris.

    N'est-ce-pas la vocation de tout forum d'entraide ? Apparemment les vrais débutants n'ont pas l'air d'être les bienvenues .... Ou bien tu n'as peut-être pas la patience ou n'apprécie pas certaines questions "bêtes" que je peux être amener à poser.
    Dans tous les cas, je te remercie quand même de ce que tu as apporté dans ce topic et donc j'ai compris que je dois me démerder pour comprendre et ne pas trop poser de questions.
    Bonne soirée

  14. #34
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    IL-MAFIOSO
    et donc j'ai compris que je dois me démerder pour comprendre et ne pas trop poser de questions.
    Ne pas trop poser de questions est un bon signe pour un débutant ,et aux débutants qui pose trop de questions j'ai pour remède de leur donner un os à croquer du genre résoudre compter les Etoiles ...
    C'est une astuce personnelle pour avoir la paix...!!!
    bonne soirée !!!

  15. #35
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonsoir,
    je n ai pas pris le tps de tout lire....... cela m a l air imbuvable ..... j ai preferé me rabattre sur un bon vrai verre d apero qui lui sera + digeste
    Je te laisse compter les etoiles car je suis deja passé par la et te souhaite bien du courage ....

  16. #36
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    bonsoir,
    je n ai pas pris le tps de tout lire....... cela m a l air imbuvable ..... j ai preferé me rabattre sur un bon vrai verre d apero qui lui sera + digeste
    Je te laisse compter les etoiles car je suis deja passé par la et te souhaite bien du courage ....
    Bonjour wallace1, il me semble que seule la première partie t'était destiné et que par exemple tu aurais pu tout simplement me dire que je ne dois pas utiliser dans ce cas le Framework 4.0 Client si je veux faire du cast...
    je vais relire une nouvelle fois la charte et le but de ce forum car apparement je n'ai rien compris !

    Edit 1 : Et il ne l'accepte non plus pas : Cast n'est pas un membre de 'system.windows.forms.datagridviewrowcollection'
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    La seule référence à Cast est dans "Méthodes d’extension"
    et là : https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    Surement une déclaration manquante ou autre truc de ce genre.

  17. #37
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Après avoir survolé MSDN et sans avoir testé essaie en ajoutant

    dans ton entête de module.

    Parce que le cast(of T) est apparemment dans System.Linq et pas dans System
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  18. #38
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonjour clementmarcotte

    Merci pour l'information et depuis je n'ai plus l'erreur Cast ...

  19. #39
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonjour à tous,

    Voilà comme suggéré je continue à ronger mon os
    J'aimerais avoir quelques suggestions pour un cas que j'avais déjà énuméré plus haut dans ce topic :

    Il peut arriver qu'il y ai un chevauchement d'horaire pour une même salle. Auparavant, je dessinais mon datagridview avec uniquement des caractères et en dur ... du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formgraphique.TableGrapheDataGridView.Rows(XD).Cells(H + 5).Value = Convert.ToChar(9658) & " " & laminutedepart
    Avant de faire cette saisie, je vérifiais que pour toute la journée, la dite salle était libre. Si tel était le cas, je remplissais comme au dessus. Dans l'autre cas, je remplissait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formgraphique.TableGrapheDataGridView.Rows(XD).Cells(H + 5).Value = Formgraphique.TableGrapheDataGridView.Rows(XD).Cells(H + 5).Value & vbCrLf &Convert.ToChar(9658) & " " & laminutedepart
    Je faisais un retour à ligne en recopiant ce qu'il y avait précédemment et en ajoutant la nouvelle donnée. S'il y avait plusieurs chevauchements, çà marchait toujours ...

    La question que je me pose est existe t-il un équivalent à VbCrLf dans l'évènement Cellpaint pour pouvoir si nécessaire, laisser ce qui est déjà dessiné et ajouter le nouveau dessin en dessous mais toujours dans la même ligne du Datagridview ?
    Merci d'avance pour vos suggestions

  20. #40
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonsoir à tous,

    Je remonte un peu ce topic pour avoir quelques suggestions, pistes sur mon post précédent, style un nouvel os à croquer ...
    Sinon bonnes fêtes de fin d'année à vous tous.

Discussions similaires

  1. [c#] Remplir un DataGridView avec plusieurs DataTable
    Par macfred dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/02/2010, 12h02
  2. Réponses: 1
    Dernier message: 28/09/2006, 12h43
  3. Demande de conseil pour réaliser un planning
    Par massol joel dans le forum Access
    Réponses: 6
    Dernier message: 26/08/2006, 13h09
  4. [DBMS_STATS][9i]Réaliser la même opération qu'avec ANALYZE.
    Par Le nain Attila dans le forum Oracle
    Réponses: 7
    Dernier message: 09/06/2006, 19h35
  5. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 03h15

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