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

Développement Windows Discussion :

Mise à jour du Dataset après modification dans la base de donnée


Sujet :

Développement Windows

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut Mise à jour du Dataset après modification dans la base de donnée
    Bonjour à tous,

    J'ai un petit soucis depuis peu:
    J'ai créé une une méthode permettant de mettre ma base de donnée à jour via un fichier CSV importé par l'utilisateur.

    La méthode pour mettre la base de donnée à jour est la suivante :
    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
    Public Sub ImportCSV2SQL(fileName As String, sqlTable As DataTable, column2Import() As Integer)
     
            ' Préparation des variables SQL
            Dim sqlConxtion As SqlConnection = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\jeanraad\Desktop\" & _
                                                                 "Holcim Quality Solutions\VB.Net\HQS_Dev\HQS_Dev\HQSdb.mdf;Integrated Security=True" & _
                                                                 ";Connect Timeout=30")
     
            Dim sqlAction As SqlBulkCopy = New SqlBulkCopy(sqlConxtion.ConnectionString)
            Dim sqlCommand As New SqlCommand("DELETE FROM dbo." & sqlTable.TableName, sqlConxtion)
            'Dim sqlAdapter As New SqlDataAdapter("Select * From dbo." & sqlTable.TableName, sqlConxtion)
     
            ' Préparation des variables StreamReader et CsvReader
            Dim stream As StreamReader = New StreamReader(fileName) : Dim streamCount As StreamReader = New StreamReader(fileName)
            Dim csvCopy As CsvReader = New CsvReader(stream, True, ";"c)
     
            ' Décompte du nombre de lignes dans le fichier *.CSV
            Dim nbrLines As Integer = 0
            While streamCount.Peek <> -1
                nbrLines += 1
                Dim line As String = streamCount.ReadLine()
            End While
     
            ' Comparaison avec la table existante dans SQL et le nombre de lignes est plus conséquente
            ' dans le *.CSV alors remplacement de la table sinon demande à l'utilisateur s'il veut la 
            ' remplacer(1) ou annuler l'action (2)
            If sqlTable.Rows.Count <= nbrLines - 1 And sqlTable.Rows.Count <> 0 Then
                Dim msgResult = MsgBox("The number of rows of the CCList that you are trying to import is higher than those of those of the already existing CCList. Do you want to replace the old table or abort the importation?")
                If msgResult = 1 Then
                    Exit Sub
                End If
            End If
     
            ' Tentative de se conecter au serveur SQL
            Try
                sqlCommand.Connection.Open()
            Catch myerror As SqlException
                MsgBox("Error connection SQL")
                sqlCommand.Connection.Close()
                Exit Sub
            End Try
     
            ' Suppression de la table afin de pouvoir y introduire de nouvelles données
            sqlCommand.ExecuteNonQuery()
            sqlCommand.Connection.Close()
     
            ' Mappings des colonnes entre le fichier *.CSV et la table de destination
            For i = 0 To column2Import.Length - 1
                sqlAction.ColumnMappings.Add(column2Import(i), i)
            Next
     
            ' Transfère des données des données du fichier *.CSV à la table de destination
            sqlAction.DestinationTableName = sqlTable.TableName
            sqlAction.WriteToServer(csvCopy)
        End Sub
    Et le bouton qui fait appel à cette méthode est la suivante:
    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
    Private Sub ButtonImportCC_Click(sender As Object, e As EventArgs) Handles ButtonImportCC.Click
            ' Paramétrage de l'OpenFileDialog afin que l'utilisateur puisse choisir la CC List à importer
            dialog2openFile.Title = "Select a CC List to Import"
            dialog2openFile.Filter = "CC List (*.csv)|*.csv"
            dialog2openFile.InitialDirectory = Application.StartupPath & "\Tools\"
            dialog2openFile.RestoreDirectory = True
     
            ' Ouverture de l'OpenFileDialog
            ' Si l'utilisateur click sur OK alors la bdd SQL CCList est mise à jour
            If dialog2openFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                ImportCSV2SQL(dialog2openFile.FileName, Me.HQSdbDataSet.CCList, {0, 2})
            End If
     
            Me.CCListTableAdapter.Dispose()
            Me.CCListTableAdapter.Fill(Me.HQSdbDataSet.CCList)
            Me.DBDataGrid.DataSource = Me.CCListBindingSource
            Me.DBDataGrid.Dock = System.Windows.Forms.DockStyle.Fill
    Tout fonctionne à merveille mais le DataGridview (DBDataGrid) ne se met pas à jour. Il ne se met à jour que lorsqu'on ferme l'application et qu'on la redémarre...
    J'ai cherché partout et essayé toutes les propositions que j'ai pu trouver mais apparemment ça ne marche pas...
    Quelqu'un saurait me dire ce qui cloche ou comment réeffectuer cette réactualisation?

    Encore merci...

  2. #2
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Citation Envoyé par Ravens Voir le message
    Me.CCListTableAdapter.Fill(Me.HQSdbDataSet.CCList)
    Me.DBDataGrid.DataSource = Me.CCListBindingSource
    Tu exécutes la requête sur HQSdbDataSet.CCList mais ta grille est bindée à CCListBindingSource, il est le rapport entre les deux?

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    Si je transforme ces deux lignes en ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.CCListTableAdapter.Fill(Me.HQSdbDataSet.CCList)
            Me.CCListBindingSource.DataSource = Me.CCListTableAdapter
            Me.DBDataGrid.DataSource = Me.CCListBindingSource
    ça s'actualise donc on est déjà en bon chemin mais ça s'actualise en rien à voir:


    Edit:Excuse moi je dois préciser que je suis assez débutant

  4. #4
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    On ne peut pas t'aider si tu ne postes tout ton code.

    A premier vu tu définis le DataSource de CCListBindingSource et de ta grille à chaque fois, tu devrais le faire tout au début quand tu initialises tes vriables.

    Comme ça à chaque fois que ta source de données changes, ton CCListBindingSource est notifié.

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    Moi je veux bien te poster tout mon code mais on est parti pour >500 lignes rien que pour cette frame

    C'est pour ça que je n'ai posté que les deux sub qui concernaient ce problème...

    Concernant le début j'ai ceci :
    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
     
    'Actions entreprises lors du chargement de frmMain
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TODO: cette ligne de code charge les données dans la table 'HQSdbDataSet.CCList'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            Me.CCListTableAdapter.Fill(Me.HQSdbDataSet.CCList)
            Me.DBQualityTableAdapter.Fill(Me.HQSdbDataSet.DBQuality)
            Me.SB250TableAdapter.Fill(Me.HQSdbDataSet.SB250)
            Me.QualiroutesTableAdapter.Fill(Me.HQSdbDataSet.Qualiroutes)
            Me.DBClientsTableAdapter.Fill(Me.HQSdbDataSet.DBClients)
     
            WriteIni("General Sources", "Tools", Application.StartupPath & "\Tools\")
            WriteIni("General Sources", "Standards", Application.StartupPath & "\Standards\")
     
            If RibbonControlMain.SelectedRibbonTabItem.Text = "  STANDARDS" Then
                Me.DBDataGrid.Visible = False
                Me.AxAcroPDF.Visible = True
                Me.AxAcroPDF.Dock = System.Windows.Forms.DockStyle.Fill
            ElseIf RibbonControlMain.SelectedRibbonTabItem.Text = "  EDIT" Then
                Me.AxAcroPDF.Visible = False
                Me.DBDataGrid.Visible = True
                Me.DBDataGrid.Dock = System.Windows.Forms.DockStyle.Fill
            End If
        End Sub
    Dis moi ce que tu aimerais voir en plus de mon code et je le poste sans aucun soucis...
    Ou si tu veux que je joignes l'entièreté en zip...

  6. #6
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Tu as pris en compte ce que je t'avais dit dans ma réponse précédente?

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    Visual Studio le prend automatiquement en compte.
    Lorsqu'on rajoute un CCListTableAdapter et CCBindingSource dans le Windows Form il initialise tout lui même non?
    D'ailleurs la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.CCListTableAdapter.Fill(Me.HQSdbDataSet.CCList)
    Visual Studio le rajoute lui même automatiquement.

    Je dois rajouter autre chose?

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    Personne?

Discussions similaires

  1. [Vxi3] Mise à jour des rapports après modification d'un univers
    Par caribou29 dans le forum Webi
    Réponses: 3
    Dernier message: 27/02/2012, 16h56
  2. Réponses: 5
    Dernier message: 20/09/2011, 18h55
  3. Réponses: 8
    Dernier message: 04/11/2008, 11h05
  4. Réponses: 1
    Dernier message: 29/04/2008, 10h58
  5. Réponses: 2
    Dernier message: 02/05/2006, 22h09

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