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

Windows Forms Discussion :

DataGridView sauver la taille et l'ordre des colonnes


Sujet :

Windows Forms

  1. #1
    Membre du Club Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Points : 68
    Points
    68
    Par défaut DataGridView sauver la taille et l'ordre des colonnes
    Bonjour,

    J'utilise un composant DataGridView sur un Form.

    J'ai les deux propriétés suivant à True :

    AllowUserToResizeColumns
    AllowUserToOrderColumns

    Comment faire pour qu'après modification de la largeur d'une colonne et de sa position, que cette modification soit persistante ?

    Merci à vous, cher lecteur.

    Didier.

  2. #2
    Membre expérimenté

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Points : 1 738
    Points
    1 738
    Billets dans le blog
    1
    Par défaut
    Et, je cherche la meme chose.

    J'ai rien trouvé sur le forum(ou j'ai mal cherché), ni sur le net (ou j'ai mal cherché).
    Je n'ai rien trouvé sur la MSDN non-plus

    Cordialement
    Petit poulain devient grand de jour en jour...

    Petit Poulain, ce n'est que pour les intimes!

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Pour ma part, je stocke les personnalisations d'environnement directement en Base de donnée (car j'ai toujours un BDD sous la main).
    Donc pour chaque code utilisateur, je charge au démarrage de l'appli la liste de propriétés personnalisées pour le User/ou celle par défaut.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    ça doit être possible de faire ça avec un fichier Settings non ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre du Club Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Bonjour.

    Pour ma part, je stocke les personnalisations d'environnement directement en Base de donnée (car j'ai toujours un BDD sous la main).
    Donc pour chaque code utilisateur, je charge au démarrage de l'appli la liste de propriétés personnalisées pour le User/ou celle par défaut.

    Cdt.
    Est ce qu'un composant existe, ou je dois passer en revue chaque Colonne à la mano ? et stocker la dimension, et l'ordre ...
    une liste avec le nom de la Colonne et sa Taille suffirait...

  6. #6
    Membre du Club Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    ça doit être possible de faire ça avec un fichier Settings non ?
    J'imagine que oui.
    C'est vrai qu'effectivement, j'ai une BD sous la main.

  7. #7
    Membre expérimenté

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Points : 1 738
    Points
    1 738
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    ça doit être possible de faire ça avec un fichier Settings non ?
    Perso, ce serait ça qui m'interresserait, su quelqu'un a un idée...
    Petit poulain devient grand de jour en jour...

    Petit Poulain, ce n'est que pour les intimes!

  8. #8
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Citation Envoyé par SaumonAgile Voir le message
    ça doit être possible de faire ça avec un fichier Settings non ?
    Bien sûr, mais j'aime pas les fichiers settings !

    Citation Envoyé par dsolheid Voir le message
    Est ce qu'un composant existe, ou je dois passer en revue chaque Colonne à la mano ? et stocker la dimension, et l'ordre ...
    une liste avec le nom de la Colonne et sa Taille suffirait...
    Je doute qu'un composant existe, je passe effectivement par la sauvegarde de chaque propriété nécessaire pour chaque colonne ...
    Bien encapsulé, c'est pas si lourd.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  9. #9
    Membre du Club Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Points : 68
    Points
    68
    Par défaut
    Bonsoir,

    Voilà, j'ai bossé 2h, et j'ai une solution (sauvegarde dans un champs d'une table "Table_Parametre" dans la BD, champs qui doit porter le nom du DataGridView, ce qui permet de sauvegarder les Settings de plusieurs DGV).


    Procédure de Stockage dans la BD, qui est appelé plus bas lors du RESIZE d'une colonne, ou d'un REORDER
    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
        ' Stockage des settings de toutes les colonnes d'un datagridview, 
        ' dans un champs du même nom que le datagridview
        Public Sub storeColumnSettings(ByVal dgv As DataGridView)
            Dim column As DataGridViewColumn
            Dim arr As New ArrayList()
     
            For i As Integer = 0 To dgv.Columns.Count() - 1
                For Each column In dgv.Columns()
                    If column.DisplayIndex = i Then
                        Dim columnSettings As Object = column.Name + ";" + column.Width.ToString()
                        arr.Add(columnSettings)
                    End If
                Next
            Next
     
            ' mise à jour dans la BD
            Dim paramRow() As Data.DataRow
            paramRow = Me.BoobooBDDataSet.Table_Parametre.Select("ID ='1'")
            Dim str As String
            str = Utilities.Serialize(arr)
            paramRow(0)(dgv.Name) = str
            MsgBox(str)
            Try
                Me.Table_ParametreTableAdapter.Update(Me.BoobooBDDataSet.Table_Parametre)
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Update failed Table_Parametre ")
            End Try
        End Sub
    Procédure de chargement, appelé quand vous avez charger le DataGridView, moi je le fais dans le BindingSource_CurrentChanged, de mon Form principal...
    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
     
        ' Chargement des settings de toutes les colonnes d'un datagridview, 
        ' dans un champs du même nom que le datagridview
        Public Sub loadColumnSettings(ByVal dgv As DataGridView)
            Dim column As DataGridViewColumn
            Dim arr As New ArrayList()
            Dim element As String
     
            ' lecture dans la BD
            Dim paramRow() As Data.DataRow
            paramRow = Me.BoobooBDDataSet.Table_Parametre.Select("ID ='1'")
            arr = Utilities.Deserialize(paramRow(0)(dgv.Name), GetType(ArrayList))
     
            For Each element In arr
                Dim split As String() = element.ToString().Split(";")
                For Each column In dgv.Columns()
                    If column.Name = split(0) Then
                        column.DisplayIndex = arr.IndexOf(element)
                        column.Width = split(1)
                    End If
                Next
            Next
        End Sub
    Event lors du RESIZE, le boolean 'loader' est placer à False au début du onLoad du Form et à True à la fin du onLoad.
    C'est pour être sure que les Data sont loadée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ' colonne size
        Private Sub Table_Groupe_ContactDataGridView_ColumnWidthChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles Table_Groupe_ContactDataGridView.ColumnWidthChanged
            If loaded = True Then
                storeColumnSettings(Table_Groupe_ContactDataGridView)
            End If
        End Sub
    Event lors du REORDER
    ' ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Sub Table_Groupe_ContactDataGridView_ColumnDisplayIndexChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles Table_Groupe_ContactDataGridView.ColumnDisplayIndexChanged
            If loaded = True Then
                storeColumnSettings(Table_Groupe_ContactDataGridView)
            End If
     
        End Sub
    Class pour la sérialisation, à pacer dans un fichier à part .. (utilities.vb)
    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
    Imports System.Xml
     
    Imports System.Xml.Serialization
     
    Imports System.Text
    Imports System.IO
    Public Class Utilities
     
     
     
     
     
        Public Shared Function Serialize(ByVal Obj As Object) As String
            Dim serializer As New XmlSerializer(Obj.GetType)
            Dim sb As New StringBuilder()
            Dim writer As New StringWriter(sb)
            serializer.Serialize(writer, Obj)
            writer.Flush()
            writer.Close()
            writer.Dispose()
     
            Return sb.ToString()
        End Function
     
     
        Public Shared Function Deserialize(ByVal str As String, ByVal t As Type) As Object
            Dim serializer As New XmlSerializer(t)
            Dim reader As New StringReader(str)
            Dim obj As Object = serializer.Deserialize(reader)
            reader.Close()
            reader.Dispose()
     
            Return obj
        End Function
     
     
    End Class

    L'ensemble marche bien chez moi ...
    Juste un détail ...
    LE champs où vous stocké les données doit être de type MEMO.
    ET un beau bug, dans le fichier DataSet.xsd, c'est le champs en question qui avait une taille prédéfinie de 1024 Bytes MAX... du coup, il me manquait un morceau lors du stockage.
    Changer la valeur à la mano !!!

    J'espère que cela vous sera utile !

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

Discussions similaires

  1. [Débutant] DataGridview et ordre des colonnes
    Par shaun_the_sheep dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/06/2012, 14h46
  2. Modifier ordre des colonnes d'un datagridview
    Par miikado dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/05/2012, 20h12
  3. ordre des colonnes dans une datagridview
    Par padawanette dans le forum ASP.NET
    Réponses: 1
    Dernier message: 07/04/2009, 22h13
  4. Réponses: 7
    Dernier message: 28/06/2008, 19h44
  5. Rajout colonne - changer l'ordre des colonnes ?
    Par Coptere dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/09/2005, 10h56

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