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

VB.NET Discussion :

Ajouter des lignes à une DataGridView avec DataSource List(Of )


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut Ajouter des lignes à une DataGridView avec DataSource List(Of )
    Bonjour,

    J'ai une datagridview, DGV, dont la datasource, DS, est une list(of obj), LOf.
    Il semble que même avec la propriété de la DGV "AllowuserToAddRow" sur "True", je ne puisse pas ajouter de ligne directement depuis la grille.

    Alors j'ai bien vu que je pouvais le faire en ajoutant un objet à ma LOf, mais ca demande d'ajouter deux bouton sur le formulaire, un pour ajouter des entrées, un autre pour les supprimer, et d'écrire des handler et tout et tout.

    c'est pas si compliqué que ca à faire, mais j'aimerais pouvoir me baser sur la grille: que la ligne "NewRow" apparaisse et que quand l'utilisateur entre de nouvelles valeurs, les objets correspondant soient ajoutés à la LOf, quitte à écrire un peu de code dans le handler "NewRowNeeded" de la DGV ou quelquechose du genre... et le luxe serait de supprimer les objets de la LOf quand ils sont supprimés de la grille...

    Est-ce possible?
    merci,

    Zebrette

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour zebrette.
    Oui c'est possible mais tu dois gerer explicitement ton BindingSource sous-jacent qui est à l'oeuvre behind the scene ......
    Tu utilises pour ce faire lors de:
    1/Ajout d'un row:
    -son event adding_new pour creer un nouvel Objet "factice" avec ton constructeur New qui est ensuite "editable" par l'user ou bien carrement le populer soit par saisie de l'User soit par toute autre Source...
    2/Suppression d'un row (le luxe pas cher de 2012):
    -un appui sur la touche supprime positionne sur la row visee fait simplement le boulot...
    le code du form avec un dgv ,un listbox et un textbox bindes à un BindindSource lequel .........est lie à ta liste (of Person).....
    Il y a egalement un statusStrip avec un statusStripLabel pour "ecouter" l'event ListChanged du BindindSource(itemAdded,itemRemoved....).

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Public Class Form2
        Private MyListPerson As New List(Of Person)
        Private WithEvents binding1 As New BindingSource
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            With MyListPerson
                .Add(New Person("ItemFName1", "ItemLName1"))
                .Add(New Person("ItemFName2", "ItemLName2"))
                .Add(New Person("ItemFName3", "ItemLName3"))
                .Add(New Person("ItemFName4", "ItemLName4"))
            End With
     
     
            Me.binding1.AllowNew = True
            Me.binding1.DataSource = MyListPerson
     
            Me.ListBox1.DataSource = Me.binding1
            Me.ListBox1.DisplayMember = "FirstName"
            Me.DataGridView1.DataSource = Me.binding1
            Me.textBox1.DataBindings.Add("Text", Me.binding1, "FirstName")
     
     
        End Sub
     
        Private Sub binding1_AddingNew(ByVal sender As Object, ByVal e As System.ComponentModel.AddingNewEventArgs) Handles binding1.AddingNew
            e.NewObject = New Person()
        End Sub
     
        Private Sub binding1_ListChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ListChangedEventArgs) Handles binding1.ListChanged
            Me.ToolStripStatusLabel1.Text = e.ListChangedType.ToString()
     
        End Sub
     
     
    End Class
     
    Public Class Person
        Public Sub New()
     
        End Sub
        Public Sub New(ByVal FName As String, ByVal LName As String)
            FirstName = FName
            mLastName = LName
        End Sub
        Private mFirstName As String
        Public Property FirstName() As String
            Get
                Return mFirstName
            End Get
            Set(ByVal value As String)
                mFirstName = value
            End Set
        End Property
        Private mLastName As String
        Public Property LastName() As String
            Get
                Return mLastName
            End Get
            Set(ByVal value As String)
                mLastName = value
            End Set
        End Property
    End Class
    bon code...........

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut
    parfait, c'est ce qu'il me fallait.

    en très résumé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim binding1 as New bindingsource
            binding1.datasource= List(Of obj)
            binding1.AllowNew = True
    Merci par ailleurs pour les bonus, l'event ListChanged et le code sample.


    Zebrette

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

Discussions similaires

  1. [AC-2003] Ajouter des lignes à une tables depuis Excel
    Par DonKnacki dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/12/2010, 16h04
  2. [AC-2007] Ajouter des lignes à une liste basée sur une requête
    Par Cinesra dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2010, 13h19
  3. Réponses: 5
    Dernier message: 31/03/2010, 21h22
  4. [WD14] Thread qui ajoute des lignes à une table
    Par rndhnqz dans le forum WinDev
    Réponses: 11
    Dernier message: 09/02/2010, 12h48
  5. Réponses: 3
    Dernier message: 28/09/2008, 15h41

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