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

  1. #1
    Invité
    Invité(e)
    Par défaut [VB.Net 2013] Enregistrer datatable (Ajouter, modifier et supprimer) d’ une DataGridView en tant qu’objet !
    Bonjour,
    Vu que vb.net est un IDE orienté objet, je me demande si il est possible de sauvegarder la table temporaire d’un datatable (Ajouter, modifier et supprimer) dans la table physique de ma base de données Sql Serveur en tant qu’objet !
    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
    Public Function Execute(ByVal Sql As String, ByVal Param As Object) As Object 'Retourne DataTable pour le  DataGridView1.DataSource =Execute(Sql ,Param )
            Dim myObject As New Object
            Using dataadapter As New SqlDataAdapter
                dataadapter.SelectCommand = New SqlCommand( _
                   Sql, _SQLConn)
                For Each c As Object In Param
                    If c.Size <> 0 Then dataadapter.SelectCommand.Parameters.AddWithValue(c.Name, c.Value)
                Next
                Dim ds As New DataTable()
                dataadapter.Fill(ds)
                Return ds
            End Using
        End Function
    Private Sub Valider_Click(sender As Object, e As EventArgs) Handles Valider.Click
    Dim Ds As DataTable = DataGridView1.DataSource
    End Sub

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Qu'entends-tu par sauvegarder en tant qu'objet?

    Tu peux lier ta grille avec ta base de données via les mécaniques de DTO et l'utilisation d'Entity Framework

    Concernant la sauvegarde d'objets en base de données il me semble que des choses existe, mais ce ne sont pas des bases de données relationnelle.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour ZenZiTone a merci pour cette réponse.

    Qu'entends-tu par sauvegarder en tant qu'objet?
    Le datagrid est un objet, datadable est un objet et table1 est un objet donc je veux manipuler des objets !

    Tu peux lier ta grille avec ta base de données
    je ne veux pas lier ma grid avec la table les mise à jour doivent être explicite!


    J’affecte à ma datagrid une tranche de vie en fonction des informations dont je dispose dans une table exemple : select * from table1 where Id_seconaire= @Id_seconaire
    Ma fonction execute me revoit le datadable temporaire. L‘utilisateur fait ses modification et enregistre les données du datagrid dans la table1 dans mon exemple. Au lieu de parcourir la datagrid et exécuter les requêtes successives, je voudrais modifier les id existants de la table temporaire dans la table physique table1, supprimer les id inexistant de la table temporaire pour cet Id_seconaire dans la table physique table1 ou ajouter les nouvelles valeurs de la table temporaire pour cet Id_seconaire dans la table physique table1 dans l’exemple !

    Un peu comme si j’enregistrai un fichier Excel !

    Concernant la sauvegarde d'objets en base de données il me semble que des choses existe
    Merci je regarde.

    Edit: je veux éviter ça!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For l As Integer = 0 To DataGridView1.RowCount - 1
                For c As Integer = 0 To DataGridView1.Columns.Count - 1
                      sql = DataGridView1.Rows(l).Cells(c).Value
                Next
            Next
    Dernière modification par Invité ; 08/04/2016 à 11h56.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ce n'est pas directement dans SQLServer et cela aboutit dans un fichier distinct sur ton disque, mais cela permet de conserver des informations intermédiaires à quelque part.

    Tu peux enregistrer une DataTable, ou même un DataSet en entier, c'est le même principe, au format XML avec une seule ligne de code, et rappeler ton fichier avec une seule ligne de code. (Au pire, deux, si tu ne veux pas utiliser la surcharge qui enregistre le schéma avec la même instruction.)

    Comme je suis en train de faire une xième installation ou réparation de VS, je t'envoies cela de mémoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable("Octave").writeXml(etc)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable("Octave").ReadXML
    Mais, honnêtement, tu ne risques pas grand chose à vérifier avant, dans ton aide ou dans MSDN.

    P.S. Si tu utilises le DataView pour trier ou filtrer tes informations, tu peux demander à ton DataView de convertir son contenu filtré en DataTable ou en Tableau en mémoire vive.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir clément ,

    Je comprend, mais c'est pas exactement ce que je veux faire.

    Si ma table était lié à ma datagrid, toute valeurs ajoute / modifier / supprimé, serait reporter automatiquement ou dans ma base Sql serveur.

    Le problème qu'il me faut valider la cohérence des données éparpillées sur autres onglets d'un multipages et apporter d'autres informations lié au règles de gestion.

    De plus l'utilisateur peut sortir du formulaire sans vouloir enregistrer son travail.

    En d'autres terme un truc du genre datagrid.update mais qui ne sauvegarde pas dans la table temporaire mais dans ma base Sql serveur.

    La je vais dire un grosse bêtise mais j'y vais!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dataadapter.UpdateCommand = New SqlCommand( _
                   DataGridView1.DataSource.??????? , _SQLConn)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Petite précision, si je n'utilise pas de tables liées c'est justement parce que je ne veux pas qu'elles le soit!

    Nous sommes en programmation Object, c'est bien le diable si je peux pas utiliser le datatable de ma grid pour mettre à jour ma base de données!

    MaTable.Enregistrement= DataGridView1.DataSource.Enregistrement!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je retente!

    J'ai un projet enveloppe qui contient la connexion à la base de données et la structure de traitement des datatables.
    Il contient les informations globales à l'application login password, menu etc.

    Un certain nombre de dll gèrent des modules différents. Édition.dll, Admin.dll, peut importe.dll. Cela me permet de faire évoluer l'application sens recompiler le tout.

    Chaque dll est susceptible d'utiliser les informations communes du projet enveloppe. Elles ne connaissent pas la base n'y le serveur lié à la connectons.

    Le projet enveloppe qui lui dispose de ces informations ne s'intéresse pas aux traitement de chaque module!

    Il fournir le datatable de la requête sollicité a charge au module en question d'en faire bonne usage.

    Les mises à jour de la base de données ce fait par le projet enveloppe sur la seule base du dadatable!

    En d'autres termes je veux modélisé le traitement de mise à jour de la base de données!
    Dernière modification par Invité ; 13/04/2016 à 08h59.

  8. #8
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    Je retente!
    [...]
    Les mises à jour de la base de données ce fait par le projet enveloppe sur la seule base du dadatable!

    En d'autres termes je veux modélisé le traitement de mise à jour de la base de données!
    J'avoue avoir du mal à comprendre le problème. Qu'est-ce que le "datatable" que tu mentionnes? Un objet graphique ou une classe? Dans les deux cas, le but est-il de mettre à jours la base de données physique en fonction des valeurs de ce "datatable" dès lors qu'une propriété à été modifiée?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour ZenZiTone,
    merci d'avoir répondu.

    c'est une classe de System.Data.SqlClient

    je ne fait pas de liaison avec la base de données mais j'instancie une table temporaire à ma DataGridView.

    c'est elle que je récupéré pour enrichire ma table physique dans sql serveur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.DataGridView1.DataSource=MyConnecxion.Execute(sql,param)
    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
    Public Function Maj(ds As DataTable)
    '?????
    End Function
    
    Public Function Execute(ByVal Sql As String, ByVal Param As Object) As Object 'Retourne DataTable pour le  DataGridView1.DataSource =Execute(Sql ,Param )
            Dim myObject As New Object
            Using dataadapter As New SqlDataAdapter
                dataadapter.SelectCommand = New SqlCommand( _
                   Sql, _SQLConn)
                For Each c As Object In Param
                    If c.Size <> 0 Then dataadapter.SelectCommand.Parameters.AddWithValue(c.Name, c.Value)
                Next
                Dim ds As New DataTable()
                dataadapter.Fill(ds)
                Return ds
            End Using
        End Function
    Code Bouton validation : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Dim met As New Metier
    met.MyDataTable= Me.DataGridView1.DataSource 'pour qualification des données
    MyConnecxion.maj( Me.DataGridView1.DataSource) ' ce code est en réalité dans la classe Métier!
    donc toutes les modification dans DataGridView1 affecte DataGridView1.DataSource et c'est un fois que je click sur valider que je mets à jour ma table SQL Serveur!

    l'idée est de pouvoir manipuler l'objet quelque soit la table et/ou la base de données.
    Dernière modification par Invité ; 13/04/2016 à 13h18.

  10. #10
    Invité
    Invité(e)
    Par défaut
    voila une piste qui me semble prometteuse!
    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
    For Each d In MyDataTable.Rows
                Dim column As DataColumn : SqlInsertValue = "" : SqlUpdateValue = "" : SqlInsertEntete = ""
                For Each column In MyDataTable.Columns
                    Try
                        If d("Id").ToString.Trim = "" Then
                            If column.Caption.ToUpper.Trim <> "ID" Then
                                If SqlInsertEntete.Trim = "" Then SqlInsertEntete = "[" + column.Caption + "]" Else SqlInsertEntete += ",[" + column.Caption + "]"
                                If column.Caption.ToUpper.Trim.Substring(0, 3) = "ID_" Then
                                    If SqlInsertValue.Trim = "" Then SqlInsertValue = Id Else SqlInsertValue += "," + Id
                                Else
                                    If SqlInsertValue.Trim = "" Then SqlInsertValue = _Cn.FormatChamp(d(column)) Else SqlInsertValue += "," + _Cn.FormatChamp(d(column))
                                End If
                            End If
                        Else
                            If SqlUpdateValue.Trim = "" Then SqlUpdateValue += "[" + column.Caption + "]=" + _Cn.FormatChamp(d(column)) Else SqlUpdateValue += ",[" + column.Caption + "]=" + _Cn.FormatChamp(d(column))
                        End If
     
                        Debug.Print(column.Caption + " : " + d(column).ToString)
                    Catch ex As Exception
     
                    End Try
     
                Next column
                If d("Id").ToString.Trim = "" Then
                    _Cn.Execute(SqlInsert + SqlInsertEntete + ") Values (" + SqlInsertValue + ")")
                Else
                End If
            Next d

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai résolu mon problème

    ici il était question de mettre à jour une table X d'une base de données Y en ce basant sur une table temporaire de type DataTable!

    mon projet étant divisé en 3 couches (Client,Métier et base de données). le projets est lui même divisé en librairie (DLL).

    un projets enveloppe disposant des fonctionnalités commune à toute l'application, encapsule les différentes librairies qui implémente un menu déroulant par apprentissage (présence de la DLL sur le lecteur commun!) .

    travailler à partir de la datagrid, m'imposais de développer tout ou parti de la couche métier au cas ou il me prenais l'envi du utiliser un autre type de client Console, Web, qui ne pourrait pas supporter le datagrid par exemple!

    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
    Public Sub Maj(Id As String, MyTable As DataTable)
            Dim SqlInsertValue As String = ""
            Dim SqlInsert = "INSERT INTO [" + MyTable.TableName + "] ("
            Dim SqlInsertEntete = ""
            Dim SqlUpdate = "Update  [" + MyTable.TableName + " ] set "
            Dim SqlUpdateValue = ""
            SqlInsertValue = ""
            _Cn.Execute(SqlUpdate + "[Supprimer]=1 where [Id_Secondaire]=" + Id)
            Dim d As DataRow = Nothing
            For Each d In MyTable.Rows
                Dim column As DataColumn : SqlInsertValue = "" : SqlUpdateValue = "" : SqlInsertEntete = ""
                For Each column In MyTable.Columns
                    Try
                        If d("Id").ToString.Trim = "" Then
                            If column.Caption.ToString.ToUpper.Trim <> "ID" Then
                                If SqlInsertEntete.Trim = "" Then SqlInsertEntete = "[" + column.Caption.ToString + "]" Else SqlInsertEntete += ",[" + column.Caption.ToString + "]"
                                If column.Caption.ToString.ToUpper.Trim.Substring(0, 3) = "ID_" Then
                                    If SqlInsertValue.Trim = "" Then SqlInsertValue = Id Else SqlInsertValue += "," + Id
                                Else
                                    If column.Caption.ToString.ToUpper.Trim = "SUPPRIMER" Then
                                        If SqlInsertValue.Trim = "" Then SqlInsertValue = "0" Else SqlInsertValue += ",0"
                                    Else
                                        If SqlInsertValue.Trim = "" Then SqlInsertValue = _Cn.FormatChamp(d(column)) Else SqlInsertValue += "," + _Cn.FormatChamp(d(column))
                                    End If
                                End If
                            End If
                        Else
                            If column.Caption.ToString.ToUpper.Trim <> "ID" Then
                                If column.Caption.ToString.ToUpper.Trim = "SUPPRIMER" Then
                                    If SqlUpdateValue.Trim = "" Then SqlUpdateValue += "[" + column.Caption + "]=0" Else SqlUpdateValue += ",[" + column.Caption + "]=0"
                                Else
                                    If SqlUpdateValue.Trim = "" Then SqlUpdateValue += "[" + column.Caption + "]=" + _Cn.FormatChamp(d(column)) Else SqlUpdateValue += ",[" + column.Caption + "]=" + _Cn.FormatChamp(d(column))
                                End If
     
                            End If
                        End If
                    Catch ex As Exception
                        Try
                            If d("Id").ToString.Trim = "" Then
                                If column.Caption.ToString.ToUpper.Trim = "SUPPRIMER" Then
                                    If SqlInsertValue.Trim = "" Then SqlInsertValue = "0" Else SqlInsertValue += ",0"
                                Else
                                    If SqlInsertValue.Trim = "" Then SqlInsertValue = _Cn.FormatChamp(d(column)) Else SqlInsertValue += "," + _Cn.FormatChamp(d(column))
                                End If
                            Else
                            End If
                        Catch ex2 As Exception
                        End Try
                    End Try
                Next column
                Try
                    If d("Id").ToString.Trim = "" Then
                        _Cn.Execute(SqlInsert + SqlInsertEntete + ") Values (" + SqlInsertValue + ")")
                    Else
                        _Cn.Execute(SqlUpdate + SqlUpdateValue + " Where ID=" + d("Id").ToString.Trim)
                    End If
                Catch ex As Exception
                End Try
            Next d
            _Cn.Execute("delete   [" + MyTable.TableName + "] WHERE [Supprimer]=1 and[Id_Secondaire]=" + Id)
            MyTable.BeginInit()
    End Sub

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

Discussions similaires

  1. [Débutant] Ajouter, modifier et supprimer les données d'une datagridview
    Par Aogiri dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/06/2015, 11h03
  2. ajout dynamique de colonne dans une datagridview
    Par djelloharmel dans le forum Développement Windows
    Réponses: 0
    Dernier message: 04/02/2013, 10h22
  3. ajout dynamique de colonne dans une datagridview
    Par djelloharmel dans le forum Développement Windows
    Réponses: 0
    Dernier message: 04/02/2013, 10h17
  4. Réponses: 12
    Dernier message: 05/08/2009, 13h24
  5. Réponses: 1
    Dernier message: 24/03/2006, 18h59

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