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 :

Déplacer valeur database


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Déplacer valeur database
    Bonjour à tous,

    voila j'ai un dgv remplit avec une database qui affiche les composents d'un assemblage. Ce que je voudrais c'est que quand je clique sur un bouton, l'item sélectionné se déplace d'un rang sur la droite
    J'ai essayé qqc mais rien ne bouge

    Voila le code que j'ai pour l'instant

    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
        Private Sub BtnRight_Click(sender As Object, e As EventArgs) Handles BtnRight.Click
     
            Dim MyTable As New DataTable
            Dim cmd As New OleDbDataAdapter("select * from TEMPTools", cn)
            cmd.FillSchema(MyTable, SchemaType.Source)
            cmd.Fill(MyTable)
     
            cn.Open()
            If MyTable.Rows.Count > 0 Then
                For Each R As DataRow In MyTable.Rows
     
                    If Len(txtPN1.Text) > 0 Then
                        If R.Item("ITEM1").ToString = txtPN1.Text Then
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET ITEM1='" & "" & "', ITEM2='" & txtPN1.Text & "', ITEM3='" & "" & "', ITEM4='" & "" & "'", cn)
                            Update.ExecuteNonQuery()
                            DataGridView1.Refresh()
                        End If
                    ElseIf Len(txtPN2.Text) > 0 Then
                        If R.Item("ITEM2").ToString = txtPN2.Text Then
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET ITEM1='" & "" & "', ITEM2='" & "" & "', ITEM3='" & txtPN2.Text & "', ITEM4='" & "" & "'", cn)
                            Update.ExecuteNonQuery()
                            DataGridView1.Refresh()
                        End If
                    ElseIf Len(txtPN3.Text) > 0 Then
                        If R.Item("ITEM3").ToString = txtPN3.Text Then
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET ITEM1='" & "" & "', ITEM2='" & "" & "', ITEM3='" & "" & "', ITEM4='" & txtPN3.Text & "'", cn)
                            Update.ExecuteNonQuery()
                            DataGridView1.Refresh()
                        End If
                    Else
                    End If
                Next
            End If
     
            Dim MyTable2 As New DataTable
            Dim cmd2 As New OleDbDataAdapter("select * from TEMPTools", cn)
            cmd2.FillSchema(MyTable2, SchemaType.Source)
            cmd2.Fill(MyTable2)
     
            DataGridView1.DataSource = MyTable2
            cn.Close()
     
        End Sub
    Si qq a une idée, merci d'avance

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Tu parles bien d'un déplacement d'une cellule vers la droite dans le DataGridView ?
    Si oui, faut-il déplacer toute la ligne ? Et dans ce cas, que devient la dernière cellule du DVG ? Et qu'est-ce qui vient à la place de la 1ère cellule déplacée ?

    ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En fait j'ai un datagridview qui affiche ITEM1, ITEM2, ITEM3, ITEM4 sur différentes lignes
    Si je sélectionne un ITEM2 et que je clique sur le bouton vers la droite, ITEM2 devient un ITEM3


    Du coup je déplace selon 1 item dans la database

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    En fait j'ai un datagridview qui affiche ITEM1, ITEM2, ITEM3, ITEM4 sur différentes lignes
    Si je sélectionne un ITEM2 et que je clique sur le bouton vers la droite, ITEM2 devient un ITEM3
    J'avais donc bien compris ta question, d'où la pertinence de mes questions secondaires :
    Faut-il shifter toute la ligne ?
    Item4 = Item3
    Item3 = Item2
    Item2 = Item1
    et que devient ce qui se trouvrait en Item4 ?

    En première approche, la réponse à ta question est simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim C As Integer
    Dim R As Integer
    R = .......... faut donner l'indice de la ligne concernée
    C = DataGV.Columns("ITEM2").Index
    DataGV.Item(C+1, R).Value = DataGV.Item(C, R).Value   ' et Item2 remplace Item3
    J'espère que ça t'aidera ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    En fait chaque ligne a un seul item

    par exemple :

    ITEM1
    ITEM2
    ITEM3
    ITEM4
    ITEM4
    ITEM2
    ITEM3
    Dernière modification par Invité ; 26/04/2019 à 19h22.

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bon ..., mais alors mon code doit faire ± ce que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim C As Integer
    Dim R As Integer
    R = .......... faut donner l'indice de la ligne concernée
    C = DataGV.Columns("ITEM2").Index
    DataGV.Item(C+1, R).Value = DataGV.Item(C, R).Value   ' et Item2 remplace Item3
    DataGV.Item(C, R).Value = ""    ' et l'ex Item2 est effacé

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai essayé d'adapter ton code mais je vois pas comment je peux UPDATE la table dans ma database

    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
            If MyTable.Rows.Count > 0 Then
                Dim B As Integer
                Dim C As Integer
                Dim D As Integer
     
                Dim i As Integer
     
                i = DataGridView1.CurrentRow.Index
     
                B = DataGridView1.Columns(2).Index
                C = DataGridView1.Columns(3).Index
                D = DataGridView1.Columns(4).Index
     
                DataGridView1.Item(B + 1, i).Value = DataGridView1.Item(B, i).Value
                DataGridView1.Item(C + 1, i).Value = DataGridView1.Item(C, i).Value
                DataGridView1.Item(D + 1, i).Value = DataGridView1.Item(D, i).Value
     
                DataGridView1(B, i).Value = ""
                DataGridView1(C, i).Value = ""
                DataGridView1(D, i).Value = ""
    Avec mon code d'origine, mon ITEM2 devenait ITEM3 mais le problème était que ITEM1 aussi devenait ITEM3

  8. #8
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Je suppose que tu as extrait de la DB, les données du DGV à l’aide d'une requête SQl. Dans ce cas, tu connais le lien qui existe entre chaque ligne du DVG et la DB, tu connais notamment les ID. Il est donc possible programmer à peu près ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For R = 0 To DGV.Rows.Count - 1
    Update LaTable Set CeChamp = DVG.Item("ColonneDeCeChamp", R).Value, CetAutreChamp = DVG.Item("ColonneDeCetAutreChamp", R).Value, ...
    Where ID = DVG.Item("ColonneDeID", R).Value
    ...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ta reponse m'a fait realiser mon erreur, j'ai oublié la condition WHERE

    Au final voici mon code au complet pour deplacer vers la droite

    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
        Private Sub BtnRight_Click(sender As Object, e As EventArgs) Handles BtnRight.Click
     
            Dim MyTable As New DataTable
            Dim cmd As New OleDbDataAdapter("select * from TEMPTools", cn)
            cmd.FillSchema(MyTable, SchemaType.Source)
            cmd.Fill(MyTable)
     
            Dim CNT1 As Integer = 0
            Dim CNT2 As Integer = 0
            Dim CNT3 As Integer = 0
            Dim CNT4 As Integer = 0
            Dim Seq As String
     
            cn.Open()
            If MyTable.Rows.Count > 0 Then
                For Each R As DataRow In MyTable.Rows
     
                    If Len(txtPN1.Text) > 0 Then
                        If R.Item("ITEM1").ToString = txtPN1.Text Then
     
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET ITEM1='" & "" & "', ITEM2='" & txtPN1.Text & "', ITEM3='" & "" & "', ITEM4='" & "" & "' where ID=" & txtID.Text & "", cn)
                            Update.ExecuteNonQuery()
     
                            DataGridView1.Refresh()
                        End If
                    ElseIf Len(txtPN2.Text) > 0 Then
                        If R.Item("ITEM2").ToString = txtPN2.Text Then
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET ITEM1='" & "" & "', ITEM2='" & "" & "', ITEM3='" & txtPN2.Text & "', ITEM4='" & "" & "' where ID=" & txtID.Text & "", cn)
                            Update.ExecuteNonQuery()
                            DataGridView1.Refresh()
                        End If
                    ElseIf Len(txtPN3.Text) > 0 Then
                        If R.Item("ITEM3").ToString = txtPN3.Text Then
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET ITEM1='" & "" & "', ITEM2='" & "" & "', ITEM3='" & "" & "', ITEM4='" & txtPN3.Text & "' where ID=" & txtID.Text & "", cn)
                            Update.ExecuteNonQuery()
                            DataGridView1.Refresh()
                        End If
                    End If
                Next
            End If
     
            Dim MyTable2 As New DataTable
            Dim cmd2 As New OleDbDataAdapter("select * from TEMPTools", cn)
            cmd2.FillSchema(MyTable2, SchemaType.Source)
            cmd2.Fill(MyTable2)
     
            DataGridView1.DataSource = MyTable2
            cn.Close()
     
        End Sub
    Le probleme c'est que j'qi une sequence permettant de connaitre la position de l'item dans l'assemblage et que je ne sais pas comment le modifier
    Pour etre plus :
    1
    ITEM1
    1.01
    ITEM2
    1.02
    ITEM2
    1.02.01
    ITEM3

    J'ai essayé de refaire comme au debut de mon code mais il ne prend pas en compte ceux deja present
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                            CNT1 = CNT1 + 1
                            CNT2 = CNT2 + 1
                            Seq = CNT1 & "." & Format(CNT2, "00")

  10. #10
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Perso, je ferais les déplacements uniquement sur le DGV et puis (c-à-d chaque fois que je veux, éventuellement après chaque modif du DGV), je ferais la màj de la DB uniquement en relisant TOUT le DGV. Il a peut-être un peu de redondance de traitement, mais dans la mesure où ton DGV ne contient probablement pas des milliers de lignes, c'est pas très grave.

    Il me semble que tu fais les 2 opérations en même temps.

    Or, le code que je t'ai suggéré pour le décalage concernait uniquement le DGV. Il est plutôt simple.
    Et relire le DGV pour faire les Update est plutôt simple aussi. Il faut seulement que le DGV contienne les ID de chaque ligne (éventuellement dans un colonne cachée).

    La mise à jour de la DB se fait alors en parcourant les Rows du DGV, chacune te donnant tous les champs d'un enregistrement et son ID, soit tout ce qu'il faut pour écrire la commande Update avec sa clause Where. Bien sûr, tu feras là, des Update de lignes non modifiées, il s'agit des traitements redondants dont je traitais ci-dessus. S'il le faut vraiment, il sera toujours possible d'écrire un dispositif pour éviter les màj inutiles, mais dans un premier temps, je te conseille de faire simple et de constater que ça fonctionne.

    Il ne devrait plus exister au moment de la mise à jour de contrôle de TextBox ([DC]If R.Item("ITEM1").ToString = txtPN1.Text Then[/C]), ça c'est pour le décalage seulement. Pour la mise à jour, seul de DGV compte.

    ...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour Phil Rob,

    Justement la mise a jour de ma database fonctionne. Je fais l'UPDATE de ma database pcq avec d'autres boutons, je modifie, ajoute, etc. des donnees a cette table donc c'est plus simple pour voir en direct.

    Mon probleme vient du fait lors du clickcell du form initial, j'ai une fonction qui me permet de determiner la sequence en fonction de la position et quand j'essaie de refaire la meme chose apres le deplacement d'un item, je ne sais pas comment faire pour determiner la nouvelle sequence en prenant en compte celles existants deja.
    Par exemple j'ai 1.1 et 1.1.1 : en deplacant le 1.1.1 il devrait devenir 1.2 mais il devient 1.1

    Je sais pas si c'est tres clair
    Merci de ton aide

  12. #12
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Par exemple j'ai 1.1 et 1.1.1 : en deplacant le 1.1.1 il devrait devenir 1.2 mais il devient 1.1
    Si c'est le 1.1.1 initial qui devient 1.1, que devient le 1.1 ?
    Je suppose que tu parles ici du DGV et donc que tu déplaces le 1.1.1 dans une autre cellule. C'est donc toi qui lis la cellule et en affecte une autre, et c'est bien toi qui écrit 1.1 à l'ancienne position du 1.1.1. Dès lors, pourquoi n'écris-tu pas 1.2 si c'est ce que tu veux ? Ici, je plaisante

    Comme tu n'écris "manuellement" le contenu de chaque cellule, je suppose que tu as une erreur dans le code et pour mettre le doigt sur cette erreur, je te suggère d'exécuter ce code pas à pas à l'ordi et sur une feuille de papier : pour chaque valeur, calculer ce quelle devrait être selon toi, ce quelle sera selon l'algorithme tel que tu le perçois, et enfin en laissant exécuter ce pas par le programme, voir ce qu'il calcule.
    Quand les valeurs vont diverger, tu trouveras la correction nécessaire.

    Mais j'en reviens encore à mes màj séparées : je te proposais de travailler sur le DGV et de mettre la DB à jour ensuite. Mais le contraire n'est pas interdit : la DB étant correctement modifiée, relancer la requête d'alimentation du DGV devait le mettre à jour. Dans ce cas, ne pas oublier de rompre sa liaison à la DB (Bindings.Clear, DataSource = Nothing, DGV.Rows.Clear), refaire la requête et réaffecter la propriété DataSource : le DGV devrait être en ordre.

    J'espère que ceci te permettra d'avancer...

Discussions similaires

  1. [XL-2013] Déplacer valeurs cellules sous conditions
    Par rivaol2689 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/12/2013, 14h04
  2. [Vxi3] Déplacer valeurs graphiques
    Par thibaultspreux dans le forum Webi
    Réponses: 2
    Dernier message: 04/11/2011, 14h50
  3. Déplacer valeur d'une colonne
    Par geofnich dans le forum SAS Base
    Réponses: 4
    Dernier message: 10/05/2010, 17h21
  4. Réponses: 3
    Dernier message: 23/06/2008, 11h05
  5. Déplacer valeur d'un combobox vers un textbox
    Par srt-what? dans le forum IHM
    Réponses: 2
    Dernier message: 31/07/2007, 23h01

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