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 :

Nombre automatique par ligne


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut Nombre automatique par ligne
    Bonjour à tous,

    J'ai remplit un dgv dans lequel est affiche les composents d'un assemblage et maintenant je voudrais rajouter un nombre automatique ligne par ligne

    Pour etre plus clair :

    ligne 1 : 10
    ligne 2: 20
    etc...

    J'ai deja un bout de programme mais rien ne s'affiche.
    Je met 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
                CNT = 0
     
                Dim MyTable2 As New DataTable
                Dim CNX2 As New OleDbDataAdapter("select * from TEMPTools ORDER BY USER", cn)
                CNX2.FillSchema(MyTable2, SchemaType.Source)
                CNX2.Fill(MyTable)
     
                cn.Open()
                If MyTable2.Rows.Count > 0 Then
                    For i = 0 To MyTable2.Rows.Count - 1
                        For Each row As DataRow In MyTable2.Rows
     
                            CNT = CNT + 10
                            Dim Update As New OleDbCommand("UPDATE TEMPTools SET COUNT1='" & CNT & "', COUNT='" & CNT & "' WHERE RequistionNum='" & TextBox3.Text & "'", cn)
                            Update.ExecuteNonQuery()
                        Next
                    Next
                End If
                cn.Close()
    Si vous avez des idees, merci d'avance

  2. #2
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Peut-être peux-tu te baser sur l'indice des lignes du DataGV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For R As Integer = 0 To DataGV.Rows.Count - 1
    ... chaque R est un indice, de 0 à Count-1 et (R+1)*10 donne les nombres 10, 20, ...
    De plus, si l'intérêt se situe seulement à l'écran, cette valeur peut être écrite dans DataGV.Rows(R).HeaderCell.Value.

    ...

  3. #3
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta réponse Phil Rob

    J'ai essayé d'adapter mon code mais je n'obtient rien ni dans la database ni dans le dgv
    L'interet doit etre dans la database pcq je le réutilise plus loin dans mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                For R As Integer = 0 To AssyToolRoutingTemp.DataGridView1.Rows.Count - 1
                    CNT = (R + 1) * 10
                    Dim Update As New OleDbCommand("UPDATE TEMPTools SET COUNT1='" & CNT & "', COUNT='" & CNT & "' WHERE RequistionNum='" & TextBox3.Text & "'", cn)
                    Update.ExecuteNonQuery()
                Next

  4. #4
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Ta boucle me paraît très correcte (sauf peut-être : Dim CNT As Integer qui manque ...).
    Si cela ne met pas à jour ta DB, c'est qu'il y a une erreur de syntaxe dans le SQL, sans doute un problème d'apostrophe, comme souvent.
    Tu peux tester avec MessageBox.Show(Update.ExecuteNonQuery()) car ExecuteNonQuery retourne le nombre d'enregistrements affectés.
    De même que mettre ta chaine SQL dans une variable (Dim SQL As String = "Update ...) et exécuter en pas à pas te permet de voir la commande effectivement utilisée ...

    Je ne connais hélas rien d'autre pour régler ces chaines SQL.

  5. #5
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Dim CNT As Integer ne manque pas c'est juste que je l'ai déclaré plus tôt.

    En mettant MessageBox.Show(Update.ExecuteNonQuery()) ne n'obtient rien du tout alors que je suis quand même obtenir qqc si c'était pris en compte.

    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
    '      RE-COUNT
                Dim CNT As Integer = 0
     
                Dim MyTable2 As New DataTable
                Dim CNX2 As New OleDbDataAdapter("select * from TEMPTools ORDER BY USER", cn)
                CNX2.FillSchema(MyTable2, SchemaType.Source)
                CNX2.Fill(MyTable)
     
                cn.Open()
     
                For R As Integer = 0 To MyTable2.Rows.Count - 1
                    CNT = (R + 1) * 10
                    Dim Upd As String = "UPDATE TEMPTools SET COUNT1='" & CNT & "', COUNT='" & CNT & "' WHERE RequistionNum='" & TextBox3.Text & "'"
                    Dim Update As New OleDbCommand(Upd, cn)
                    'Dim Update As New OleDbCommand("UPDATE TEMPTools SET COUNT1='" & CNT & "', COUNT='" & CNT & "' WHERE RequistionNum='" & TextBox3.Text & "'", cn)
                    Update.ExecuteNonQuery()
                    MsgBox(Update.ExecuteNonQuery)
                Next
                cn.Open()
    Merci d'avance

  6. #6
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Attention, dans ton MessageBox il s'agit d'un 2ème ExecuteNonQuery : c'est normal qu'il n'y fasse plus rien.
    Supprime la ligne avant le MessageBox de sorte à ne faire qu'une seule opération.

    Pour ce qui est de l'exactitude de la phrase SQL, ne peux-tu la mettre dans l’assistant de création de requêtes d'Access et voir si elle est acceptée ?

    Mais je vois une anomalie : RequistionNum n'est-il par une clé primaire ? Ce n'est peut-être pas un vrai problème mais imagine tout de même ce qui se passe si ce RequistionNum vaut 1234 et que ton TextBox contient 1234 : il serait normal (si la syntaxe SQL est correcte) qu'UNE mise à jour soit faite. Mais à quoi bon la répéter autant de fois qu'il y a de ligne dans ton DGV ?

    J'espère que tu trouveras ici des pistes de correction ...

  7. #7
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Je vois ce que tu veux dire Phil Rob mais le probleme c'est que je sais pas quoi mettre comme condition pour l'UPDATE parce que j'ai besoin d'avoir un nombre pour chaque ligne

  8. #8
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Au final j'ai trouvé comment faire en modifiant mon code d'origine

    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
                CNT = 0
                Dim ID As String
     
                Dim MyTable2 As New DataTable
                Dim CNX2 As New OleDbDataAdapter("select * from TEMPTools ORDER BY USER", cn)
                CNX2.FillSchema(MyTable2, SchemaType.Source)
                CNX2.Fill(MyTable2)
     
                cn.Open()
                If MyTable2.Rows.Count > 0 Then
                    For Each R As DataRow In MyTable2.Rows
                        ID = R.Item("ID")
                        CNT = CNT + 10
     
                        Dim Update As New OleDbCommand("UPDATE TEMPTools SET COUNT1=" & CNT & " where ID=" & ID & "", cn)
                        Update.ExecuteNonQuery()
                    Next
                End If
     
                cn.Close()
    Maintenant j'aimerais modifier l'ordre des nombres
    par exemple :
    10 ligne 1
    20 ligne 2
    30 ligne 3

    Quand je modifie 30 par 20, la ligne 3 devient la ligne 2 et 20 devient 30

    Je sais pas si c'est très clair
    Merci d'avance pour vos reponses

  9. #9
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonsoir,

    Quand tu écris :
    Quand je modifie 30 par 20, la ligne 3 devient la ligne 2 et 20 devient 30
    cela signifie que c'est ce que tu veux ou bien ce que tu ne veux pas ? dans ce dernier cas, que faudrait-il que ce soit ?

    A noter que tes changements de valeurs ne devraient pas changer l'ordre dans la DB puisque là, ce sont les ID qui ordonnent.

    ...

  10. #10
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    En fait c'est ce que je voudrais car mon dgv est trié par le COUNT donc les chiffres 10 20 30...
    Le but serait de changer le nombre d'une ligne afin de changer l'ordre d'affichage

    Donc dans ma database, l'ordre ne changerais pas mais le nombre COUNT oui

  11. #11
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonsoir,

    Je te propose de retrier ton DGV sur la colonne COUNT en réponse à l'événement CellValueChanged de cette colonne, soit quelque chose ressemblant à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub DGV_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles MiDGV.CellValueChanged
       Dim IndexCount As Integer = DGV.Columns("COUNT").Index
       If e.ColumnIndex = IndexCount Then
            If DGV.Rows.Count > 1 Then
                DGV.Sort(DGV.Columns(IndexCount), System.ComponentModel.ListSortDirection.Ascending)
            End If
       End If
    ' Autres codes éventuels sur CellValueChanged ...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Tu peux essayer de désactiver l'ordre auto de ta DGV avant le fill puisque ta commande SELECT fait déjà un début de classement par USER.

    Une fois que ta boucle de maj des numero est finie, tu réactives l'ordre auto de la DGV

  13. #13
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Une petite précision quant à mon code d'hier soir : le tri se fait sur les chaines et non sur les valeurs numériques.
    Si tes COUNT ont tous la même longueur, ce n'est pas un problème. Par contre, si les COUNT peuvent être de longueurs différentes, alors le tri alphanumérique ne sera par correct. Par exemple : 10, 2, 36 et 7 sont en ordre alphanumérique, mais bien sûr pas en numérique.
    Pour trier en numérique, il faut écrire un algo adapté.

    Fais signe si besoin ...

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Tu souhaites garder l'ordre initial donné par ta requête ?
    Select * from TEMPTools ORDER BY USER

    La solution la plus simple est de définir l'ordre de ta DGV sur cette colonne (USER) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DGV.Sort(Me.DGV.Columns("USER"), System.ComponentModel.ListSortDirection.Ascending)
    Tu parcoures ensuite la DGV en modifiant les valeurs de ta colonne COUNT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim Num as integer = 10
    for each row as DataGridViewRow in DGV.rows
      row.Cells.Item("COUNT").Value = Num.ToString 
      num +=10
    next
    Puis une fois fini, tu resélectionnes la colonne COUNT pour redéfinir le tri de ta DGV.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DGV.Sort(Me.DGV.Columns("COUNT"), System.ComponentModel.ListSortDirection.Ascending)

Discussions similaires

  1. Nombre de" ; "par ligne dans un fichier CSV
    Par delilou dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 25/07/2011, 15h01
  2. [JTextArea] Limiter nombre de caractères par lignes
    Par doudine dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/02/2006, 17h26
  3. Limiter le nombre de caractère par ligne d'un textarea
    Par rantanplan08 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 04/01/2006, 19h31
  4. nombre de caractères par ligne à l'affichage
    Par trotters213 dans le forum Oracle
    Réponses: 3
    Dernier message: 03/11/2005, 09h51
  5. Nombre d'occurence d'un motif par ligne
    Par anne-so dans le forum Langage
    Réponses: 8
    Dernier message: 22/08/2005, 19h36

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