88 Meta GridView
Th3maz1ng edited this page 2024-08-19 20:48:58 +00:00

Meta Ctrl_XtraGrid

Retour

Comment initialiser et utiliser un Meta_GridView, c'est ce que nous allons voir ici

Introduction
Le Ctrl_XtraGrid est un contrôle permettant d'afficher des données sous la forme d'un tableau.
C'est l'un des éléments les plus utilisées.
En voici un apperçu : Ctrl_ExtraGrid

Utilisation du Ctrl_XtraGrid

  1. Partie Designer
  1. Déposez via le designer VisualStudio un controle Ctrl_GridBarreOutils
  2. Déposez via le designer VisualStudio un controle Ctrl_XtraGrid
  1. Partie Code

Initialisation

Il est maintenant nécessaire d'initialiser le Ctrl_XtraGrid(GridView) avec les informations de la base de données.
Il est aussi important de d'initialiser le Ctrl_GridBarreOutils afin de la lier au tableau.

Voici comment faire :

'L'initialisation se fait dans la fonction : Public Overridable Function Initialiser
Public Overridable Function Initialiser(ByRef CnxBDD_P As Metaproductique.Kmprod.C_SGBD, ByVal Droits_P As Metaproductique.Kmprod.C_Droits, ByVal Parametre_P As String, ByVal Master_P As Object) As Boolean
        Try
        
            Ctrl_XtraGrid1.Initialiser(CnxBDD_P, Droits_P, System.Reflection.Assembly.GetCallingAssembly().GetName.Name + "_" + Me.GetType().Name.ToString, Ctrl_XtraGrid1.Name)
            
            Return True
        Catch ex As Exception
            Return False
        End Try
End Function

Chargement des données

Maintenant que le Ctrl_XtraGrid est initialisé, il ne reste plus qu'a lui transmettre un jeu de données à afficher.

Voici comment faire :

'Le chargement se fait dans la fonction : Public Overridable Function Charger
Public Overridable Function Charger() As Boolean
        Try
            
            'L'information sur la requête SQL est disponible lors d'un contrôle : ctrl + clique souris bouton droit
            Ctrl_XtraGrid1.Charger(GridDataTable_c, "Requête SQL permettant de récupérer les données affichées")
            
            'Il y a également une autre façon de charger les données, mais il est conseillé d'utiliser celle du dessus pour les nouveaux développments (lorsqu'elle fonctionne)
            'With Ctrl_XtraGrid1
             '   .Requete = "Requête SQL permettant de récupérer les données affichées"
             '   If GridDataTable_c IsNot Nothing Then
             '       .DataSource = GridDataTable_c
             '   End If
            'End With
            
            'Permet de charger l'apparence du tableau en BDD
            Ctrl_GridBarreOutils1.Initialiser(Ctrl_XtraGrid1)
            
            Return True
        Catch ex As Exception
            Meta.Meta_MessageBox.C_MessageBox.Show("Erreur lors de l'affichage : " & ex.Message, "Erreur", Nothing, MessageBoxButtons.OK)
            Return False
        End Try
End Function

Pour aller plus loins

Définition du style des colonnes

AttentionAvec le nouveau système de metaproductique, une partie de la configuration des colonnes peut être faite avec un ctrl + clique droit sur le Ctrl_XtraGrid
Il peut également y avoir des conflits entre la configuration côté code et celle faite via la GUI (une configuration va prendre le dessus sur l'autre).

Définition du style dans le code .NET

Voici un exemple de code commenté illustrant la façon de définir le style des colonnes :

    Public Overridable Function Charger(ByVal MA_ID_p As String, ByVal DT_DEBUT_p As Date, ByVal DT_FIN_p As Date) As Boolean
        Try
            
            'Chargement du GridView
            With Ctrl_XtraGridView1
                .Requete = DAL_V_SYNTHESE_EVENEMENTS_c.LastRequete
                If ListeBEL_V_SYNTHESE_EVENEMENTS_c IsNot Nothing Then
                    .DataSource = ListeBEL_V_SYNTHESE_EVENEMENTS_c
                End If
            End With

            'Initialisation des colonnes
            Dim ListeColonnes_l As New List(Of Meta_DevExpress.C_XtraGrid_Colonne)
            
            InitialiserColonnes(ListeColonnes_l)

#Region "InitGridView"
            'On applique le style définit à chaque colonne du tableau
            For Each ColListe_F As Meta_DevExpress.C_XtraGrid_Colonne In ListeColonnes_l
                For Each Col_F As DevExpress.XtraGrid.Columns.GridColumn In Meta_GridView1.Columns
                    If Col_F.Tag Is Nothing Then
                        Col_F.OptionsColumn.AllowEdit = False
                        'Permet d'aligner le titre de la colonne
                        Col_F.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center
                        If Col_F.Name = ColListe_F.Name Then
                            Col_F.Visible = ColListe_F.Visible
                            Col_F.VisibleIndex = ColListe_F.Displayindex
                            Col_F.Caption = ColListe_F.HeaderText
                            Col_F.ColumnEditName = ColListe_F.Name
                            Col_F.Width = ColListe_F.Width
                            Col_F.Tag = "DONE"
                        Else
                            'On cache les colonnes que l'on ne souhaite pas afficher
                            Col_F.Visible = False
                            Col_F.VisibleIndex = -1
                        End If
                    End If
                Next
            Next
#End Region
            'Fin initialisation

            Ctrl_GridBarreOutils1.Initialiser(Ctrl_XtraGridView1)
        Catch ex As Exception
            Meta.Meta_MessageBox.C_MessageBox.Show("Erreur lors du chargement : " & ex.Message, "Erreur", Nothing, MessageBoxButtons.OK)
        End Try
        Return True
    End Function
    
    Private Sub InitialiserColonnes(Colonnes_P As List(Of Meta_DevExpress.C_XtraGrid_Colonne))
        Dim Col_L As Meta_DevExpress.C_XtraGrid_Colonne, colNum_l As Integer = 0

        Col_L = New Meta_DevExpress.C_XtraGrid_Colonne : colNum_l += 1
        With Col_L
            .Displayindex = colNum_l
            .Name = "colTR_LIBELLE" 'col + Nom de la colonne dans la base de données
            .Visible = True
            .HeaderText = "Titre à afficher"
            .Width = 75
            .Format_Colonne = Meta_DevExpress.C_XtraGrid_Colonne.Enum_Format_Colonne.Aucun
        End With
        Colonnes_P.Add(Col_L)

        Col_L = New Meta_DevExpress.C_XtraGrid_Colonne : colNum_l += 1
        With Col_L
            .Displayindex = colNum_l
            .Name = "colRE_LIBELLE" 'col + Nom de la colonne dans la base de données
            .Visible = True
            .HeaderText = "Titre à afficher"
            .Width = 75
            .Format_Colonne = Meta_DevExpress.C_XtraGrid_Colonne.Enum_Format_Colonne.Aucun
        End With
        Colonnes_P.Add(Col_L)
    End Sub

AttentionIl est important d'initialiser le Ctrl_GridBarreOutils après avoir appliqué le style définit à chaque colonne du tableau.

Définition du style via la GUI

Pour faire apparaître la fenêtre de personalisation : faire un ctrl + clique droit sur le Ctrl_XtraGrid.
Une fenêtre comme celle-ci va s'ouvre :
FE

Les onglets qui nous intéressent sont :

  • L'onglet "Gestion colonnes"
  • L'onglet "Mise en page"

AstuceOn remarquera également la présence d'informations qui peuvent aider pour le processus de débogage.
Comme la requête SQL qui est éxécutée afin de récupérer les données à afficher.

L'onglet "Gestion colonnes"
FE

Cet onglet permet de renommer le titre des colonnes (Colonne "Titre"), ainsi que de définir le format d'affichage des données (Colonne "Type").

AttentionBien penser à enregistrer les changements. Les configurations des tableaux sont présentes dans la table MO_DEVX_PERSONNALISATION qui se situe dans la base KM.

L'onglet "Mise en page"
FE

Cet onglet permet de sauvegarder l'apparence du tableau en le liant avec un nom de profil. Si ce profil éxiste, il est écrasé par le nouveau, sinon il est créé. Voici les propriétés sauvegardées avec cet onglet :

  • L'ordre des colonnes
  • La largeur des colonnes
  • Tout tri appliqués sur les colonnes
  • Sûrement d'autres choses ...

Gérer certains événement

L'événement "CustomDrawCell"

Cet événement permet de définir la façon dont va être affiché la données au run time.
Voici comment procéder :

    Private Sub GridView1_CustomDrawCell(sender As Object, e As DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs) Handles Meta_GridView1.CustomDrawCell
        'Définition de l'affichage de la date au run time'
        Select Case e.Column.Name
            Case "colHE_DATEDEBUT"
                e.DisplayText = CDate(e.CellValue).ToString("dd/MM/yyyy HH:mm")
            Case "colHE_DATEFIN"
                e.DisplayText = CDate(e.CellValue).ToString("dd/MM/yyyy HH:mm")
            Case "colHE_DUREE"
                Dim tp_l As New TimeSpan(0, 0, CInt(e.CellValue))
                e.DisplayText = tp_l.Minutes.ToString + ":" + tp_l.Seconds.ToString + " minutes"
        End Select
    End Sub

AstuceC'est également avec cet événement qu'il est par exemple possible de définir la couleur de fond de la cellule en fonction de la valeur de la donnée qui est contenue par exemple.
Libre à vous de faire ce que vous voulez.

Si vous avez des suggestions d'ajouts, de corrections, m'en faire part Merci

Dernière maj : 18/07/2019