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

vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention - 9 janv. 2013 à 15:06 - Dernière réponse : vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 9 janv. 2013 à 16:03
3
Merci
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é.

Merci foliv57 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de foliv57
vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention - 9 janv. 2013 à 17:04
0
Merci
PARFAIT !

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

Merci beaucoup.
Commenter la réponse de vercomax
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 9 janv. 2013 à 17:06
0
Merci
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
Commenter la réponse de foliv57
vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention - 9 janv. 2013 à 18:02
0
Merci
Merci, c'est complet.
Commenter la réponse de vercomax

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.