Créer un nouveau datagridview sans les lignes d'un premier [Résolu]

Signaler
Messages postés
548
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2013
-
Messages postés
548
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2013
-
Bonjour,

J'ai besoin de créer un datagridview à partir d'un autre mais en gardant que les colonnes (sans les lignes donc).
Je cherche la méthode la plus rapide.

Merci.

4 réponses

Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
6
Bonjour,

Voici déjà une approche pour copier la structure des colonnes :
Public Sub CopieColonnes(grilleSource As DataGridView, grilleDestination As DataGridView)
        grilleDestination.Columns.Clear()
        For Each colonne As DataGridViewColumn In grilleSource.Columns
            grilleDestination.Columns.Add(CType(colonne.Clone(), DataGridViewColumn))
        Next
End Sub


Cette approche part du principe que votre nouvelle DataGridView est déjà créée.

Pour copier les autres propriétés de la grille source lors de la création de la copie, l'objet DataGridView n'ayant pas de fonction Clone, je crois malheureusement qu'il faudra faire une affectation propriété par propriété.
Messages postés
548
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2013
2
PARFAIT !

C'est exactement ce qu'il me fallait et c'est rapide.

Merci beaucoup.
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
6
Et voici un petit exemple sympa (à compléter si nécessaire) pour un clonage complet.

Je précise que le clonage des lignes en option est lourd, donc à éviter. Je l'ai juste mis pour exemple.

Public Module Extensions

    <System.Runtime.CompilerServices.Extension()> _
    Public Function Clone(ByVal grid As DataGridView, cloneSource As Boolean) As DataGridView

        'Création d'une nouvelle instance de grille
        Dim newGrid As New DataGridView

        'Copie des propriétés importantes
        newGrid.AllowUserToAddRows = grid.AllowUserToAddRows
        newGrid.AllowUserToDeleteRows = grid.AllowUserToDeleteRows
        newGrid.AllowUserToOrderColumns = grid.AllowUserToOrderColumns
        newGrid.AllowUserToResizeColumns = grid.AllowUserToResizeColumns
        newGrid.AllowUserToResizeRows = grid.AllowUserToResizeRows
        newGrid.AlternatingRowsDefaultCellStyle = grid.AlternatingRowsDefaultCellStyle.Clone
        newGrid.AutoScrollOffset = grid.AutoScrollOffset
        newGrid.AutoSize = grid.AutoSize
        newGrid.AutoSizeColumnsMode = grid.AutoSizeColumnsMode
        newGrid.AutoSizeRowsMode = grid.AutoSizeRowsMode
        newGrid.BackgroundColor = grid.BackgroundColor
        newGrid.BorderStyle = grid.BorderStyle
        newGrid.CausesValidation = grid.CausesValidation
        newGrid.CellBorderStyle = grid.CellBorderStyle
        newGrid.ColumnHeadersBorderStyle = grid.ColumnHeadersBorderStyle
        newGrid.ColumnHeadersDefaultCellStyle = grid.ColumnHeadersDefaultCellStyle.Clone
        newGrid.ColumnHeadersHeight = grid.ColumnHeadersHeight
        newGrid.ColumnHeadersHeightSizeMode = grid.ColumnHeadersHeightSizeMode
        newGrid.ColumnHeadersVisible = grid.ColumnHeadersVisible
        newGrid.EditMode = grid.EditMode
        newGrid.Enabled = grid.Enabled
        newGrid.EnableHeadersVisualStyles = grid.EnableHeadersVisualStyles
        newGrid.Font = CType(grid.Font.Clone, Font)
        newGrid.ForeColor = grid.ForeColor
        newGrid.GridColor = grid.GridColor
        newGrid.MultiSelect = grid.MultiSelect
        newGrid.ReadOnly = grid.ReadOnly
        newGrid.RowHeadersBorderStyle = grid.RowHeadersBorderStyle
        newGrid.RowHeadersDefaultCellStyle = grid.RowHeadersDefaultCellStyle.Clone
        newGrid.RowHeadersVisible = grid.RowHeadersVisible
        newGrid.RowHeadersWidth = grid.RowHeadersWidth
        newGrid.RowHeadersWidthSizeMode = grid.RowHeadersWidthSizeMode
        newGrid.ScrollBars = grid.ScrollBars
        newGrid.RowsDefaultCellStyle = grid.RowsDefaultCellStyle.Clone
        newGrid.SelectionMode = grid.SelectionMode
        newGrid.ShowCellErrors = grid.ShowCellErrors
        newGrid.ShowCellToolTips = grid.ShowCellToolTips
        newGrid.ShowEditingIcon = grid.ShowEditingIcon
        newGrid.ShowRowErrors = grid.ShowRowErrors
        newGrid.AutoGenerateColumns = grid.AutoGenerateColumns

        'Copie des colonnes
        For Each column As DataGridViewColumn In grid.Columns
            newGrid.Columns.Add(CType(column.Clone(), DataGridViewColumn))
        Next

        'Copie de la source demandée
        If cloneSource Then

            'La grille d'origine est liée à une source
            If grid.DataSource IsNot Nothing Then

                'Pointe la meme source que la grille d'origine
                newGrid.DataSource = grid.DataSource

            Else

                'Copie des lignes de la grille d'origine
                For Each row As DataGridViewRow In grid.Rows
                    If Not row.IsNewRow Then 'On ne copie pas la ligne d'ajout
                        newGrid.Rows.Add(row.CloneWithValues())
                    End If
                Next

            End If

        End If

        Return newGrid
    End Function

    <System.Runtime.CompilerServices.Extension()> _
    Public Function CloneWithValues(ByVal row As DataGridViewRow) As DataGridViewRow

        'Clone la ligne d'origine
        Dim newRow As DataGridViewRow = CType(row.Clone(), DataGridViewRow)

        'Copie les valeurs
        For index As Integer = 0 To row.Cells.Count - 1
            newRow.Cells(index).Value = row.Cells(index).Value
        Next

        Return newRow
    End Function

End Module


Grace aux extensions, l'utilisation est toute simple :
'Clone sans les lignes
Dim maCopie As DataGridView = DataGridViewSource.Clone(False)

'Clone avec les lignes
Dim maCopie As DataGridView = DataGridViewSource.Clone(True)


Ou DataGridViewSource est un objet de type DataGridView
Messages postés
548
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2013
2
Merci, c'est complet.