Créer un nouveau datagridview sans les lignes d'un premier

Résolu
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 - 9 janv. 2013 à 15:06
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 - 9 janv. 2013 à 18:02
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

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
9 janv. 2013 à 16:03
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é.
3
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
9 janv. 2013 à 17:04
PARFAIT !

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

Merci beaucoup.
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
9 janv. 2013 à 17:06
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
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
9 janv. 2013 à 18:02
Merci, c'est complet.
0
Rejoignez-nous