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 :

modification d'une ligne datagridview qui modifie dans le dataset


Sujet :

VB.NET

  1. #1
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut modification d'une ligne datagridview qui modifie dans le dataset
    bonjours,

    Voila mon problème :

    Lorsque je modifie une ligne dans mon datagridview celle-ci ce modifie bien à la place de l'ancienne valeur mais lorsque je veux copié cela pour mettre le dataset a jours et ensuite la base de donnée a jours cela ne fonctionne pas.
    je vous met ma routine pour effectuer cela :

    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
     
    Public Sub mettreAJour(ByVal ligne As String, ByVal textePrecedent As String, ByVal table As String)
     
     
     
            ObjetDataRow = ObjetDataSet.Tables(table).Rows(ligne - 1)
            'modification de la valeur des champs
            ObjetDataRow("textePrecedent") = textePrecedent
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OdbcCommandBuilder(objetDataAdapter)
     
     
            'Mise à jour
            objetDataAdapter.Update(ObjetDataSet, table)
     
     
            'On vide le DataSet et on le 'recharge' de nouveau
            ObjetDataSet.Clear()
     
            objetDataAdapter.Fill(ObjetDataSet, table)
     
            ObjetDataTable = ObjetDataSet.Tables(table)
     
     
     
        End Sub
    dans l'attente de vous lire
    Personne ne sait comment on copie un datagridview dans un dataset ? je desespère

  2. #2
    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 : 42
    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
    Bonsoir,
    Comment as-tu rempli ton dataGridView?
    Pas ligne par ligne quand même?

  3. #3
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    bonjours sankasssss,
    non je ne remplit pas mon datagridview ligne par ligne je charge le le contenu de mon dataset dans une dataview. ensuite je transmet ma dataview au datagridview. je met le code de comment je fait et le code de chargement du dataset.

    pour datagridview :
    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
     
    ....
    methode_base_de_donee.remplirDataSet("insertion_job", "SM")
     
            vueDonne = New DataView(methode_base_de_donee.renvoyerTableDataSet("insertion_job"))
     
            'on remplit le datagridview avec le dataset
            DataGridView1.DataSource = vueDonne
     
            'trie le datagridview en fonction de idPage
            DataGridView1.Sort(DataGridView1.Columns("idPage"), System.ComponentModel.ListSortDirection.Ascending)
            'permet de selectionner toute une ligne d'un coup
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
     
            DataGridView1.ReadOnly = True
    et chargement du dataset :
    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
     
     Dim sql As String
     
            requete.Connection = connexion_base("localhost", "cpas-tournai-be3", "cpas", "CP88*asT")
     
            sql = "SELECT * FROM " & table & " WHERE typeTexte='" & typeTexte & "'"
     
            requete.CommandText = sql
     
            objetDataAdapter.SelectCommand = requete
     
            ObjetDataSet.Clear()
            objetDataAdapter.Fill(ObjetDataSet, table)
            ObjetDataTable = ObjetDataSet.Tables(table)
      fermerConnexion()
    De plus lorsque j execute cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT * FROM " & table & " WHERE typeTexte ='SM' AND typeTexte='MP'"
    le dataset ne se remplit pas il reste vide pour cela je doit le faire en deux requête, comment ce fait-ce? je ne trouve aucune information sur ce sujet

  4. #4
    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 : 42
    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
    Ok pour le remplissage.
    Concernant l'update de ta BD, donc ce code :

    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
     
    Public Sub mettreAJour(ByVal ligne As String, ByVal textePrecedent As String, ByVal table As String)
     
     
     
            ObjetDataRow = ObjetDataSet.Tables(table).Rows(ligne - 1)
            'modification de la valeur des champs
            ObjetDataRow("textePrecedent") = textePrecedent
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OdbcCommandBuilder(objetDataAdapter)
     
     
            'Mise à jour
            objetDataAdapter.Update(ObjetDataSet, table)
     
     
            'On vide le DataSet et on le 'recharge' de nouveau
            ObjetDataSet.Clear()
     
            objetDataAdapter.Fill(ObjetDataSet, table)
     
            ObjetDataTable = ObjetDataSet.Tables(table)
     
     
     
        End Sub
    Je ne comprend pas pourquoi tu veux une ligne et un texte précédent.
    Surtout que sur une ligne il y a aussi la notion de colonne...

    Si tu modifies dans ton datagridview une donnée, elle est immédiatement répercutée sur ta datatable, après il te suffit de bien construire ton dataadapteur avec ses commandes update, delete et insert (ce que tu as oublié de faire) et tout ce fait automatiquement quand tu appelles la méthode update.
    Comme je l'ai dit tu as oublié de mettre tes commandes update, delete et insert via ton ObjetCommandBuilder.
    En effet c'est bien de faire le commandBuilder mais celui-ci sert principalement à créer les commande à ta place.
    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    objetDataAdapter.InsertCommand = ObjetCommandBuilder.GetInsertCommand()
    objetDataAdapter.UpdateCommand = ObjetCommandBuilder.GetUpdateCommand()
    objetDataAdapter.DeleteCommand = ObjetCommandBuilder.GetDeleteCommand()
    (Voir ce site pour plus d'info)
    le commandBuilder ne servant pas à :
    'Pour modifier les valeurs changées dans le DataAdapter
    Mais bien à créé les commandes...

    [EDIT]
    Tu peux aussi créer tes commandes toi même (c'est ce que je fais personnellement) sans utiliser de commandBuilder, plus d'info sur cette discussion
    [/EDIT]

    Pour ce qui est de la requête que tu doit mettre en double pour remplir la table, tu peux mettre le code, car dans celui que tu as donnée tu ne l'a mi qu'une seul fois et ce n'est même pas la même requête que celle que tu me montre à la fin...

    Rien à voir mais petite question privée, tu fais un stage au CPAS de tournai ou tu y travailles? Moi je travaille à celui de Molenbeek-St-Jean.

  5. #5
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    bonjours,

    J'effectue bien un stage au CPAS de tournai

    Sinon la dernière requête que j ai mise c est parce que j ai rajouté un champ que j avais besoin en plus pour récupérer les donnée dans le dataset.
    Apres je me suis rendu compte qu il vallait mieux charger toute la table dans le dataset et extraire du dataset les donnée que j ai besoin (dataset que je charge au load de l'applic). de ce coté la le code a pas mal évolué.
    Par contre j ai pas encore très bien compris le principe avec le dataAdapter je vais aller y regarder de suite.

    Encore une question :
    Quand je charge la datagridview avec les donnée que je met dans la dataview je trie cette dernière du coup quand je modifie dans le dataagridview, comme les lignes ne correspondent plus avec celle de la datatable et donc se sont les mauvaise ligne qui sont modifiée dans la datatable qui repercute cela dans les records de la bdd.
    aurais-tu un conseil ?
    je met quand même comment je tri :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
     Public Sub chargerDataGridView(ByRef datagridview1 As DataGridView)
     
            Dim i As Integer
            Dim j As Integer
     
            Dim ligne As DataRow
            Dim parcourt As DataRow
            Dim ligneTemp As DataRow
     
            Dim vueDonne As DataView
            Dim tables As DataTable
     
            Dim table2 As New DataTable("insertion_job")
            Dim colId As DataColumn = New DataColumn("id", Type.GetType("System.Int32"))
            Dim colIdPage As DataColumn = New DataColumn("idPage", Type.GetType("System.String"))
            Dim colSequence As DataColumn = New DataColumn("sequence", Type.GetType("System.Int32"))
            Dim colTypeTexte As DataColumn = New DataColumn("typeTexte", Type.GetType("System.String"))
            Dim colPointeVers As DataColumn = New DataColumn("pointeVers", Type.GetType("System.String"))
            Dim colTextePrecedent As DataColumn = New DataColumn("TextePrecedent", Type.GetType("System.String"))
            Dim colUrl As DataColumn = New DataColumn("url", Type.GetType("System.String"))
            Dim colTexteSuivant As DataColumn = New DataColumn("TexteSuivant", Type.GetType("System.String"))
            Dim colFlag As DataColumn = New DataColumn("flag", Type.GetType("System.Int32"))
     
     
     
            'on renvoi toutes les données
            tables = methode_base_de_donee.renvoyerTableDataSet()
            'recrée une datatable
            table2.Columns.Add(colId)
            table2.Columns.Add(colIdPage)
            table2.Columns.Add(colSequence)
            table2.Columns.Add(colTypeTexte)
            table2.Columns.Add(colPointeVers)
            table2.Columns.Add(colTextePrecedent)
            table2.Columns.Add(colUrl)
            table2.Columns.Add(colTexteSuivant)
            table2.Columns.Add(colFlag)
     
     
            'parcourt de la datatable contenant toute la BDD
            setNombreLigne(0)
            For Each parcourt In tables.Rows
     
                'si une ligne de la datatable principale correspond à un sous menu ou menu on crée
                ' une datatable qui ne contiendra plus que sa
                'si une ligne de la datatable principale correspond à un élément du sous menu
                ' on la rajoute à la nouvelle datatable un élément du sous-menu est répéré
                'car son type de texte est DU est son idPage est le meme que celui du sous-menu
                If parcourt.Item(3) = "SM" Or parcourt.Item(3) = "MP" Or (parcourt.Item(3) = "DU" And (parcourt.Item(1) = "P01001" Or parcourt.Item(1) = "P01002")) Then
     
                    ligne = table2.NewRow()
                    ligne("id") = parcourt("id")
                    ligne("idPage") = parcourt("idPage")
                    ligne("sequence") = parcourt("sequence")
                    ligne("typeTexte") = parcourt("typeTexte")
                    ligne("pointeVers") = parcourt("pointeVers")
                    ligne("TextePrecedent") = parcourt("TextePrecedent")
                    ligne("url") = parcourt("url")
                    ligne("TexteSuivant") = parcourt("TexteSuivant")
                    ligne("flag") = parcourt("flag")
                    'on insère la ligne dans la nouvelle datatable
                    table2.Rows.Add(ligne)
                    nombreLigne = nombreLigne + 1
                End If
            Next
     
     
            'on créer une dataview
            vueDonne = New DataView(table2)
            vueDonne.Sort = "idPage"
            'algo de tri selecton
            For i = 0 To nombreLigne - 1
                ligne = vueDonne.Table.Rows(i)
                For j = (i + 1) To nombreLigne - 1
                    parcourt = vueDonne.Table.Rows(j)
                    If (ligne("typeTexte") = "DU" And parcourt("typeTexte") = "DU") And parcourt("sequence") <= ligne("sequence") Then
                        ligneTemp = ligne
                        ligne = parcourt
                        parcourt = ligneTemp
                    End If
                Next
            Next
     
            'on remplit le datagridview avec la datavue
            datagridview1.DataSource = vueDonne
     
            'trie le datagridview en fonction de idPage
            ' DataGridView1.Sort(DataGridView1.Columns("idPage"), System.ComponentModel.ListSortDirection.Ascending)
            'permet de selectionner toute une ligne d'un coup
            datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
            'empeche de modifier directement dans le datagridview
            datagridview1.ReadOnly = True
     
        End Sub
    EDIT : peut-être mettre la correspondance des numéro de ligne avant le tri
    dans une arraylist d entier ?pour garder la correspondance dans la datatable ou dataset.

    Sinon j ai comprit le commandbuilder et dataadpter je met le code sa pourrai servir pour d'autres :
    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
     
        'met a jours dans le dataset
        Public Sub mettreAJour(ByRef datagridview As DataGridView, ByRef texteBoxTextePrecedent As TextBox, ByRef texteBoxFlag As TextBox, ByVal table As String)
     
     
            Dim row As DataRow
            Dim nbLigne As Integer
            Dim ffs As DataGridViewRow
     
            nbLigne = 0
            'recupère la ligne du datagridview
            ffs = datagridview.Rows(datagridview.CurrentRow.Index)
     
            'MessageBox.Show(ffs.Cells(5).Value & "     " & ffs.Cells(0).Value & "        " & ffs.Cells(1).Value)
     
            'pourcourt le dataset jusqu'a ce que l'id de la ligne du dataset et le meme que
            'l'id de la ligne dans le datagridview
            'auquel cas on selectionne la ligne
            For Each row In ObjetDataSet.Tables(table).Rows
                If row("id") = ffs.Cells("id").Value Then
                    ObjetDataRow = row
                End If
            Next
     
            'on remplace par les nouvelles valeurs
            ObjetDataRow("textePrecedent") = texteBoxTextePrecedent.Text
            ObjetDataRow("flag") = texteBoxFlag.Text
     
            'créer les commande
            ObjetCommandBuilder = New OdbcCommandBuilder(objetDataAdapter)
            'Mise à jour
            objetDataAdapter.UpdateCommand = ObjetCommandBuilder.GetUpdateCommand()
     
            objetDataAdapter.Update(ObjetDataSet, table)
     
     
            'On vide le DataSet et on le 'recharge' de nouveau
            ObjetDataSet.Clear()
            objetDataAdapter.Fill(ObjetDataSet, table)
            ObjetDataTable = ObjetDataSet.Tables(table)
     
        End Sub

  6. #6
    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 : 42
    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
    Citation Envoyé par dharkan Voir le message
    Quand je charge la datagridview avec les donnée que je met dans la dataview je trie cette dernière du coup quand je modifie dans le dataagridview, comme les lignes ne correspondent plus avec celle de la datatable et donc se sont les mauvaise ligne qui sont modifiée dans la datatable qui repercute cela dans les records de la bdd.
    aurais-tu un conseil ?
    On voit que tu débutes avec le model ADO de .net
    En fait une vue, normalement, doit directement être le reflet d'un datatable.
    Ceci afin que quand tu modifies une donnée de ta vue, elle est immédiatement répercutée sur le dataTable et ceci sans aucune intervention de ta part...

    Le but de la vue étant de trier et filtrer les données comme marqué sur la msdn :
    Pour créer une vue filtrée et triée des données, définissez les propriétés RowFilter et Sort.
    Donc ton code de sélection:
    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
    For Each parcourt In tables.Rows
     
                'si une ligne de la datatable principale correspond à un sous menu ou menu on crée
                ' une datatable qui ne contiendra plus que sa
                'si une ligne de la datatable principale correspond à un élément du sous menu
                ' on la rajoute à la nouvelle datatable un élément du sous-menu est répéré
                'car son type de texte est DU est son idPage est le meme que celui du sous-menu
                If parcourt.Item(3) = "SM" Or parcourt.Item(3) = "MP" Or (parcourt.Item(3) = "DU" And (parcourt.Item(1) = "P01001" Or parcourt.Item(1) = "P01002")) Then
     
                    ligne = table2.NewRow()
                    ligne("id") = parcourt("id")
                    ligne("idPage") = parcourt("idPage")
                    ligne("sequence") = parcourt("sequence")
                    ligne("typeTexte") = parcourt("typeTexte")
                    ligne("pointeVers") = parcourt("pointeVers")
                    ligne("TextePrecedent") = parcourt("TextePrecedent")
                    ligne("url") = parcourt("url")
                    ligne("TexteSuivant") = parcourt("TexteSuivant")
                    ligne("flag") = parcourt("flag")
                    'on insère la ligne dans la nouvelle datatable
                    table2.Rows.Add(ligne)
                    nombreLigne = nombreLigne + 1
                End If
            Next
    doit être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tables = methode_base_de_donee.renvoyerTableDataSet()
    vueDonne = New DataView(table2)
    vueDonne.RowFilter = "NomColonne(3) = "SM" Or NomColonne(3) = "MP" Or (NomColonne(3) = "DU" And (NomColonne(1) = "P01001" Or NomColonne(1) = "P01002"))"
    Ce qui est déjà bien plus simple.
    Ensuite pour le tri je n'ai pas regarder à fond mais ca devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vueDonne.sort = "typeTexte, sequence"
    Si le tri est un peux plus complexe, on pourrais imaginé juste ajouté une colonne à la table récupèrée, numéroter de 0 à view.count - 1 les élements filtré précédement et parcourir pour trier cette colonne tous les éléments de la vue filtrée avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i as integer = 0 to vueDonne.count - 1
         dim rowView as DataRowView = vueDonne.item(i)
         ' Ton traitement de tri mais sur la colonne ajoutée
    next
    et tu fini en faisant un tri sur la fameuse colonne ajoutée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vueDonne.sort = "NomColonneAjoutee"
    et enfin tu lie ta vue au dataGridView

    De cette manière, la vue porte toujours sur la bonne table et n'est pas un recopiage d'une table de départ. et tu évite de devoir répercuté les changement sur la table d'origine une fois celui-ci effectué.
    Il te suffit en effet de faire l'update de l'adaptateur (Que tu crée quand tu charge le dataSet avec sa commande update de telle sorte qu'il ne tien pas compte de la colonne que tu ajouteras après) et le tour est joué...

    Pour ta deuxième partie de code, elle peut être fortement simplifiée si tu utilise ce que j'ai écris plus haut mais une bonne méthode à connaître est la méthode select sur le datatable ainsi la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'pourcourt le dataset jusqu'a ce que l'id de la ligne du dataset et le meme que
            'l'id de la ligne dans le datagridview
            'auquel cas on selectionne la ligne
            For Each row In ObjetDataSet.Tables(table).Rows
                If row("id") = ffs.Cells("id").Value Then
                    ObjetDataRow = row
                End If
            Next
    peut déjà être remplacée par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'pourcourt le dataset jusqu'a ce que l'id de la ligne du dataset et le meme que
            'l'id de la ligne dans le datagridview
            'auquel cas on selectionne la ligne
            dim tabRow as dataRow() ObjetDataSet.Tables(table).select("id = " & ffs.Cells("id").Value)
                If tabRow .length > 0 Then
                    ' si la ligne avec l'id existe  
                    ObjetDataRow = tabRow(0) 
                End If
    et en passant, ce n'est pas le dataset que tu parcours, c'est une table du dataset

    Bref, tu as encore du travaille sur la planche, bon code

    P.S. : Pour un code plus propre et une meilleur compréhension du model ADO.NET je te recommande ces liens :
    ADO.NET sur MSDN
    et plus particulièrement Modification de données dans ADO.NET

  7. #7
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    bonjours,

    merci de ta réponse, j'ai presque tout compris je vais aller lire les deux liens que tu as mit, cela me sera utile.

    j'éditerai ce message si une question me vient.

    EDIT :
    Si j ai bien comprit :
    Le dataAdapter contient 4 commandes : selection,ajout,mise a jours, suppression.

    Un dataset contient une collections d’objets datatable(composée de colonne et ligne) qui représente une source de donnée.

    DbCommandBuilder : génère automatiquement des instructions SQL

    Du coup avec tout sa et ce que tu me dit, alors je peux travailler sur le dataset comme bon me semble et par exemple faire en sorte que en quittant mon applic le dataset écrase sur la bdd ?
    Le dataset est bien représenter sous forme de fichier XML lorsqu il est chargé des données ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    row = ObjetDataSet.Tables(table).Select("id = " & datagridview.Rows(datagridview.CurrentRow.Index).Cells("id").Value)
     
            If row.length > 0 Then 
                ObjetDataRow = row(0)
            End If
    je pense avoir comprit ces instructions. en fait on renvoi la ligne de la datatable contenu dans le dataset sur base de l'id qui est selectionne dans la datagridview et si l'enregistrement existe alors on affect la ligne

  8. #8
    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 : 42
    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
    Tu as apparemment tout bien compris.
    Mais j'ai du mal à saisir ce que tu as écris :
    Citation Envoyé par dharkan Voir le message
    je pense avoir comprit ces instructions. en fait on renvoi la ligne de la datatable contenu dans le dataset sur base de l'id qui est selectionne dans la datagridview et si l'enregistrement existe alors on affect la ligne
    En fait, ce qu'il se passe réellement, c'est que tu peux modifier toutes les lignes du dataGridView, si tu as lié ta table au dataGridView via la propriété dataSource, tous les changement effectué sur ce dernier se répercute directement sur la table en mémoire mais bien sur pas directement sur la bd.
    La table en mémoire garde les lignes d'origine et les lignes telle que tu les modifies.
    Quand tu appelles la méthode update de ton adaptateur sur ta table, celui-ci regarde l'état des lignes. En effet celle-ci on une propriété rowState qui peux prendre plusieur état (voir msdn) :
    Added La ligne a été ajoutée à DataRowCollection et AcceptChanges n'a pas été appelé.
    Deleted La ligne a été supprimée à l'aide de la méthode Delete de DataRow.
    Detached La ligne a été créée, mais n'appartient à aucun DataRowCollection. DataRow est dans cet état immédiatement après sa création et avant son ajout à une collection, ou s'il a été supprimé d'une collection.
    Modified La ligne a été modifiée et AcceptChanges n'a pas été appelé.
    Unchanged La ligne n'a pas été modifiée depuis le dernier appel à AcceptChanges.
    et suivant l'état de la ligne, il appel la méthode de l'adaptateur (insert, delete, update) correspondante, bien sur si la ligne est unchanged, il ne fait rien.
    Pour pouvoir faire un update, il a besoin bien sur des valeurs de la ligne avant modification et ceux après, c'est pourquoi il garde ces valeurs en mémoirs, d'ailleurs, après avoir fait des changements sur ta table, si tu appelles rejectChange, tu retrouves les lignes d'origine...

    J'espère avoir été claire

  9. #9
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    bonjours,

    Je tien a te remercier pour ton aide et tes explications.
    cela m'a été bien utiles.

  10. #10
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    pense à mettre

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

Discussions similaires

  1. Modification d'une ligne dans une table
    Par darkdark dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 08/07/2011, 16h02
  2. Réponses: 3
    Dernier message: 08/08/2009, 18h05
  3. Modification d'une ligne d'un datagridview via checkbox
    Par DiamonDonald dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/04/2008, 23h42
  4. Réponses: 4
    Dernier message: 11/08/2006, 11h09
  5. Réponses: 1
    Dernier message: 19/05/2006, 17h33

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