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 :

Suppression d'une ligne dans une datagrid view et une datatable


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut Suppression d'une ligne dans une datagrid view et une datatable
    Bonjour,

    J'ai créé une datatable ("mat_tot") dans un dataset ("datas") que j'ai directement connecté à une datagridview (donc sans databinding source)
    Lorsque je supprime une ligne (événement rowsremoved)dans ma datagridview, je la supprime également dans ma datatable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datas.Tables("mat_tot").Rows.RemoveAt(e.RowIndex)
    Jusque là tout fonctionne... SAUF que lorsque la ligne a été supprimée une procédure vient réutiliser la datatable, et j'obtient le message d'erreur suivant:

    "Cette ligne a été supprimée d'une table et ne contient pas de données. BeginEdit() permettra la création de nouvelles données dans cette ligne."

    En gros, je souhaiterai donc supprimer ma ligne sans que cela ne laisse un blanc dans ma datatable.

    Existe t il un fonction qui le permette ou bien suis-je obligé de le coder moi-même?

    Par avance merci

  2. #2
    Membre régulier Avatar de SultanGeek
    Homme Profil pro
    Ingénieur automatisme & IT
    Inscrit en
    Juin 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur automatisme & IT
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 70
    Points : 91
    Points
    91
    Par défaut
    essaies de faire un commit avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datas.Tables("mat_tot").AcceptChanges();
    www.automation-sense.com - Tutoriel/Cours automatisme et informatique industrielle

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Non ça ne fonctionne pas.

    Désolé mais merci quand même

    Quelqu'un aurait une autre suggestion?

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Le dgv etant binde au DataSource,si on supprime un dgvrow ,il est supprime dans la datatable ....& VICE-VERSA Dans les 2 cas la manette "DELETE agit sur les 2 simultanement....
    Maintenant si tu supprime le datarow correspondant à e.rowindex ,dans l'event DataGridView_RowsRemoved en fait tu supprimer EN PLUS le datarow -QUI LE PRECEDE - dans la datatable......

    code .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
    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
    65
    66
    67
    68
    69
    70
    71
    72
     
    Public Class Form1
        Private myDataSet As DataSet
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myDataSet = GetDS()
            DataGridView1.DataSource = myDataSet
            DataGridView1.DataMember = myDataSet.Tables(0).TableName
     
     
            DataGridView2.DataSource = myDataSet
            DataGridView2.DataMember = myDataSet.Tables(0).TableName
     
     
        End Sub
     
     
        Private Function GetDS() As DataSet
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim dc As DataColumn
     
            dc = New DataColumn("Nom", GetType(String))
            dt.Columns.Add(dc)
            dc = New DataColumn("Prenom", GetType(String))
            dt.Columns.Add(dc)
            dc = New DataColumn("Age", GetType(Integer))
            dt.Columns.Add(dc)
     
            Dim dr As DataRow = dt.NewRow
     
            For i As Integer = 1 To 10
                dr(0) = "itemNom" + i.ToString
                dr(1) = "itemNom" + i.ToString
                dr(2) = i * 11
                dt.Rows.Add(dr)
                dr = dt.NewRow
            Next
            ds.Tables.Add(dt)
            Return ds
        End Function
     
     
        Private Sub DataGridView1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
            Dim ds As DataSet = CType(DataGridView1.DataSource, DataSet)
            Me.Text = ds.Tables(0).Rows.Count.ToString
     
        End Sub
     
     
     
     
     
        Private Sub DataGridView1_RowsRemoved(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles DataGridView1.RowsRemoved
            lbl1.Text = e.RowCount.ToString
            lbl2.Text = e.RowIndex.ToString
     
            Dim ds As DataSet = CType(DataGridView1.DataSource, DataSet)
            lbl3.Text = ds.Tables(0).Rows.Count.ToString
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            DataGridView1.Rows.RemoveAt(5)
            lbl1.Text = DataGridView1.Rows.Count.ToString
            lbl2.Text = 5
     
            Dim ds As DataSet = CType(DataGridView1.DataSource, DataSet)
            lbl3.Text = ds.Tables(0).Rows.Count.ToString
     
     
        End Sub
    End Class
    bon code...

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    +1 pour MABROUKI.

    j'ajouterais que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datas.Tables("mat_tot").Rows.RemoveAt(e.RowIndex)
    S'il avait été placé dans le code d'un bouton, car actuellement il est faux pour les raisons données par MABROUKI, aurait donné un mauvais comportement du à la possibilité de trier le datagridview.
    Le tri s'appliquant sur une DataView et non sur le dataTable c'est important car l'index 1 du DataView peut correspondre à un bien différent du coté du DataTable.
    Il suffit que l'utilisateur clique sur une colonne et c'est le bordel.
    De la manière que vous lié votre table c'est sur le defautView que le tri est reporté.
    Vous devez donc sélectionner les lignes de cette manière pour supprimer la bonne ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim row As DataRow = dt.DefaultView.Item(e.RowIndex).Row
            dt.Rows.Remove(row)

Discussions similaires

  1. [Débutant] Supprimer une ligne dans un datagrid
    Par Ashfor76 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 24/07/2015, 16h50
  2. Changer la couleur d'une ligne dans un grid view
    Par Skunkz dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/10/2010, 09h27
  3. Récupérer les attributs d'une ligne dans un Datagrid
    Par siro1 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 23/09/2009, 17h29
  4. Créer une ligne dans un datagrid
    Par GodGives dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/10/2007, 15h44
  5. [1.1] Ajouter une ligne dans un dataGrid
    Par Khrysby dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/02/2007, 13h36

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