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 :

DataGridView et fichiers XML


Sujet :

VB.NET

  1. #41
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Ou alors si tu tiens à avoir ça, il faut le recalculer à chaque fois pour toutes les opérations. A mon avis, tu ferais mieux de stocker le solde initial dans la classe Budget, et de recalculer le solde en fonction du solde initial et des crédits/débits de chaque opération
    Tu veux dire créer un nouvelle élément <solde_initial> en même temps ? parce que j'en aurais besoin lorsque que je quitte et je relance l'application mais je peux l'obtenir aussi au lancement si je fait un calcule avec le solde et le débit ou crédit de la 1er ligne.

  2. #42
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par realtux Voir le message
    Tu veux dire créer un nouvelle élément <solde_initial> en même temps ?
    Oui

    Citation Envoyé par realtux Voir le message
    parce que j'en aurais besoin lorsque que je quitte et je relance l'application mais je peux l'obtenir aussi au lancement si je fait un calcule avec le solde et le débit ou crédit de la 1er ligne.
    Oui, mais c'est conceptuellement incorrect de se baser sur une opération pour déterminer le solde, vu que le solde réel à un instant donné dépend du solde initial et de toutes les opérations passées depuis... Surtout si les opérations sont modifiables, ça deviendra rapidement ingérable

  3. #43
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    C'est OK pour recalculer le solde ça tourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Dim s As Decimal = 0
            For Each op As operation In leBudget.Operations
                s = s + (-op.debitC + op.creditC)
                op.soldeC = leBudget.SoldeInitial + s
            Next
     
            OperationBindingSource.DataSource = Nothing 'Obligé de rafraichir sinon ont doit cliquer sur une case pour voir le changement
            OperationBindingSource.DataSource = leBudget.Operations

    Concernant les "decimal" j'ai quelques petits bug d'affichage :

    _Lorsque je saisie (le débit par exemple) je suis obligé de taper "0" dans crédit(je ne peux pas le laisser vide) et si je tape du texte c'est une erreur (je récupère dans un textbox).

    _Dans le dataGrid il y'a toujours une ligne vide (en dessus des ligne qu'on ajoute ou toute seul quant le tableau est vide). Sur cette ligne on peut y faire n'importe quoi comme ajouter directement dans les cellules sans passer par fenêtre d'ajout, peut on la supprimer ?

    _Lorsque j'efface une cellule contenant un décimal(debit, credit..) dans le DGV j'obtiens ceci :

    [img=http://img23.imageshack.us/img23/5566/erreurk.png]

    _Et quant je lie le XML au lancement pour mettre les données dans la liste si une ligne contient un décimal (53.30) il me dit impossible de convertir un string en décimal pourtant j'ai changé tous les types, est lié au fait que lorsque je saisie un un décimal(ex : crédit), je doit mettre des virgules et non des points même si dans le XML il enregistre des points ?

    Bref j'ai l'impression que trop de paramètres à prendre en compte sont apparu

  4. #44
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par realtux Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OperationBindingSource.DataSource = Nothing 'Obligé de rafraichir sinon ont doit cliquer sur une case pour voir le changement
    Si tu veux que le changement soit directement répercuté dans le DGV, il faut que ta classe opération implémente l'interface INotifyPropertyChanged, et que tu déclenches l'évènement OnPropertyChanged dans les setter de tes propriétés :

    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
    Public Class Operation _
        Implements INotifyPropertyChanged
     
    ...
     
    Public Property soldeC As Decimal
        Get
           Return soldeO
        End Get
        Set(ByVal value As Decimal)
            soldeO = value
            OnPropertyChanged("soldeC")
        End Set
    End Property
     
    ...
     
    Public Event PropertyChanged As PropertyChangedEventHandler _
            Implements INotifyPropertyChanged.PropertyChanged
     
    Protected Overridable Sub OnPropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub
     
    End Class
    Le DataGridView (ou plutôt la BindingSource) s'abonnera automatiquement à cet évènement pour détecter quand une valeur de propriété change

    Citation Envoyé par realtux Voir le message
    _Lorsque je saisie (le débit par exemple) je suis obligé de taper "0" dans crédit(je ne peux pas le laisser vide) et si je tape du texte c'est une erreur (je récupère dans un textbox).
    Vérifie que la chaine n'est pas vide avant d'essayer de convertir. Si c'est vide, tu prends la valeur 0. Pour faire la conversion de String vers Decimal, utilise Decimal.Parse, ou mieux, Decimal.TryParse pour détecter les erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim debit As Decimal
    If String.IsNullOrEmpty(textBoxDebit.Text) Then
        debit = 0
    ElseIf Not TryParse(textBoxDebit.Text, debit) Then
        MessageBox.Show("La valeur saisie est incorrecte")
    End If
    Citation Envoyé par realtux Voir le message
    _Dans le dataGrid il y'a toujours une ligne vide (en dessus des ligne qu'on ajoute ou toute seul quant le tableau est vide). Sur cette ligne on peut y faire n'importe quoi comme ajouter directement dans les cellules sans passer par fenêtre d'ajout, peut on la supprimer ?
    Mets à false la propriété AllowUserToAddRows du DGV
    Toutes les propriétés, méthodes et évènements du DataGridView sont détaillées ici :
    http://msdn.microsoft.com/fr-fr/libr...w_members.aspx

    Citation Envoyé par realtux Voir le message
    Lorsque j'efface une cellule contenant un décimal(debit, credit..) dans le DGV j'obtiens ceci :

    [img=http://img23.imageshack.us/img23/5566/erreurk.png]
    Parce que le DataGridView interprète une cellule vide comme la valeur DbNull. Quand tu supprimes la ligne, il essaie d'abord de la valider, et une la valeur DbNull ne peut pas être convertie en Decimal, donc la validation échoue. Pour gérer ça proprement, intercepte l'évènement CellValidating du DataGridView pour corriger la valeur en mettant 0 à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub dataGridViewOperations_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles dataGridViewOperations.CellValidating
     
        If e.ColumnIndex = columnDebit.Index Then ' en supposant que la colonne s'appelle columnDebit dans le designer
     
            Dim value As String = CType(e.FormattedValue, String)
            If String.IsNullOrEmpty(value) Then
                e.FormattedValue = 0
            End If
        End If
    End Sub
    Citation Envoyé par realtux Voir le message
    _Et quant je lie le XML au lancement pour mettre les données dans la liste si une ligne contient un décimal (53.30) il me dit impossible de convertir un string en décimal pourtant j'ai changé tous les types, est lié au fait que lorsque je saisie un un décimal(ex : crédit), je doit mettre des virgules et non des points même si dans le XML il enregistre des points ?

    Comment tu lis le XML ? tu n'utilises pas la désérialisation ? Si tu utilises la sérialisation pour enregister, tu devrais utiliser la désérialisation pour charger les données... non seulement c'est plus logique, mais comme ça tu ne te prends pas la tête à lire manuellement le contenu du fichier

  5. #45
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Pour gérer ça proprement, intercepte l'évènement CellValidating du DataGridView pour corriger la valeur en mettant 0 à la place :
    je bloque à cette ligne : e.FormattedValue = 0 car FormattedValue est realdonly

    Comment tu lis le XML ? tu n'utilises pas la désérialisation ?
    Maintenant ouiii (je lisais mon code avec des parentnode, nexsibling et tralala ) Je peux te dire que j'en ai des lignes en moins maintenant

    j'ai traduit ta serialisation C# en VB et adapté à mon code c'est impécable :

    Pour le AllowUserToAddRows ça marche mais y'a un autre soucie maintenant ce que je peux pas supprimer la dernière ligne. Donc avec la doc que tu m'a donnée je vais essayer de trouver un moyen de mettre la dernière ligne sur ReadOnly et enlever AllowUserToAddRows

    Sinon à part quelques petits détails à régler ça marche nickel j'aurais appris plein de chose déjà sur le VB merci beaucoup .

  6. #46
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par realtux Voir le message
    je bloque à cette ligne : e.FormattedValue = 0 car FormattedValue est realdonly
    Ah oui, au temps pour moi... En fait c'est l'évènement CellParsing qu'il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub dataGridViewOperations_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles dataGridViewOperations.CellParsing
     
        If e.ColumnIndex = columnDebit.Index Then ' en supposant que la colonne s'appelle columnDebit dans le designer
     
            Dim value As String = CType(e.Value, String)
            If String.IsNullOrEmpty(value) Then
                e.Value = 0
            Else
               e.Value = Decimal.Parse(value)
            End If
            e.ParsingApplied = true
    End Sub
    Citation Envoyé par realtux Voir le message
    Pour le AllowUserToAddRows ça marche mais y'a un autre soucie maintenant ce que je peux pas supprimer la dernière ligne. Donc avec la doc que tu m'a donnée je vais essayer de trouver un moyen de mettre la dernière ligne sur ReadOnly et enlever AllowUserToAddRows
    Ben c'est toi-même qui interdit dans ton code de supprimer la dernière ligne... Ca m'avait étonné quand je l'avais vu, mais je me suis dit que ça devait être exprès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... AndAlso Not Me.tope.SelectedRows(0).Index = Me.tope.Rows.Count - 1
    Donc en gros tu n'atteins pas l'instruction qui fait la suppression quand tu es sûr la dernière ligne du DGV, parce que la condition du If n'est pas vérifiée. De toutes façons il ne vaut mieux pas faire la suppression directement dans le DataGridView, mais plutôt dans la BindingSource (ou dans la BindingList, je sais plus quelle solution tu as choisie finalement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BindingSourceOperations.RemoveCurrent()
    Si tu utilises une BindingList et pas de BindingSource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim op As Operation = CType(dataGridViewOperations.CurrentRow.DataBoundItem, Operation)
    leBudget.Operations.Remove(op)

  7. #47
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Oui j'avais oublié que j'avais mis count-1.

    Mais moi non plus je sais pas quel solution j'ai choisie en faite lol pour la suppression tes deux manipulations fonctionnent(même si je connais pas la fonction de" Ctype()".

    La datasource du DGV est : OperationBindingSource
    La datasource de OperationBindingSource est : test.fenetre1+operation

    je cois que ce reglage est apparu automatiquement quant j'ai déclaré _operations comme BindingList(Of operation) car au début la datasource du DGV je l'avais mis à test.fenetre1+operation. Je peux aussi utiliser le type List(Of operation) le reste change pas.


    Jusqu'à maintenant(avec mon ancien code de suppression) je reliais donc la liste à la datasource comme ceci : OperationBindingSource.DataSource = leBudget.Operations mais j'ai remarqué que avec tes 2 manipulations de suppression ce n'est pas utiles. Je suppose que s'était prévu


    Pour l'erreur du DGV, cette ligne à l'air de poser problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub dataGridViewOperations_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles dataGridViewOperations.CellParsing
    le dernier dataGridViewOperations est souligné :
    La clause Handles requiert WithEvents...
    C'est quoi exactement la différence entre dataGridViewOperations et le nom de mon DGV(tope) ? Car si je met ce dernier à la place de dataGridViewOperations c'est pas souligné mais quand j'exécute j'ai toujours l'erreur.

  8. #48
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par realtux Voir le message
    Mais moi non plus je sais pas quel solution j'ai choisie en faite lol pour la suppression tes deux manipulations fonctionnent(même si je connais pas la fonction de" Ctype()".
    Ben a priori tu as choisi les 2 alors
    BindingList et BindingSource, c'est un peu redondant... En fait la BindingSource est un "adapteur" entre la liste et le DGV, pour gérer notamment les notifications de modifications. Choisis une des 2 options, celle qui t'arrange le mieux :
    - déclare ta liste d'opérations comme List et non BindingList, mais garde la BindingSource entre la liste et le DGV
    - laisse ta liste en BindingList, et supprime la BindingSource (bind directement la DataSource du DGV à la BindingList)

    La fonction CType permet de convertir un objet d'un type dans un autre. Dans mon exemple de code, e.Value est déclaré comme étant de type Object, sans plus de précision, et peu donc contenir n'importe quel type d'objet. En l'occurrence le plus simple est de le récupérer sous forme de chaine, donc on convertit en chaine (attention, CType ne fait pas un "cast" mais une conversion... mais bon, si tu n'as pas encore vu ça en cours je ne vais pas t'embrouiller avec ces histoires )

    Citation Envoyé par realtux Voir le message
    Pour l'erreur du DGV, cette ligne à l'air de poser problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub dataGridViewOperations_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles dataGridViewOperations.CellParsing
    le dernier dataGridViewOperations est souligné :

    C'est quoi exactement la différence entre dataGridViewOperations et le nom de mon DGV(tope) ? Car si je met ce dernier à la place de dataGridViewOperations c'est pas souligné mais quand j'exécute j'ai toujours l'erreur.
    Bizarre... le DataGridView, tu l'as créé avec le designer ou dans ton propre code ? Normalement, avec le designer tu sélectionnes juste l'évènement que tu veux et il te génère une méthode vide avec la signature que j'ai indiqué...

  9. #49
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Bizarre... le DataGridView, tu l'as créé avec le designer ou dans ton propre code ? Normalement, avec le designer tu sélectionnes juste l'évènement que tu veux et il te génère une méthode vide avec la signature que j'ai indiqué...
    Ouii je suis bête en cliquant sur le DVG j'ai la même sauf pour dataGridViewOperations qui en faite c'est le nom de mon DGV logique
    Mais j'ai executé le code j'ai toujours l'erreur bizzar...


    Merci pour Ctype au moins j'ai une idée de la fonctionnalité de se code le détails je le serais bientôt sans doute.

  10. #50
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    en fait j'avais mis dataGridViewOperations au pif, je savais plus le nom de ton DGV... mais c'est bien 'tope' qu'il faut mettre s'il s'appelle comme ça. Passe plutôt par le designer pour générer le handler d'évènement, comme ça tu devrais pas avoir de problème

  11. #51
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Oui c'est bon j'ai accédé via le designer mais j'ai toujours l'erreur.

    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
     Private Sub tope_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles tope.CellParsing
     
            If e.ColumnIndex = DebitColumn.Index Then
     
                Dim value As String = CType(e.Value, String)
                If String.IsNullOrEmpty(value) Then
                    e.Value = 0
                Else
                    e.Value = Decimal.Parse(value)
                End If
                e.ParsingApplied = True
     
            End If
     
        End Sub

  12. #52
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je comprends plus rien... de quelle erreur tu parles en fait ?
    J'ai essayé ce code exact, ça marche nickel chez moi...

  13. #53
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Oui désolé je comprend avec tous les bugs que j'avais je parle de cette erreur :

    Lorsque j'efface une cellule contenant un décimal(debit, credit..) dans le DGV j'obtiens ceci :

    http://img23.imageshack.us/img23/5566/erreurk.png


  14. #54
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ah ok. Mais l'erreur se produit juste pour le crédit, non ?
    Ben c'est juste que dans le CellParsing, il faut faire la même chose pour toutes les colonnes numériques. Donc tu modifies juste un peu le 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
     Private Sub tope_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles tope.CellParsing
     
            If e.ColumnIndex = DebitColumn.Index OrElse e.ColumnIndex = CreditColumn.Index Then
     
                Dim value As String = CType(e.Value, String)
                If String.IsNullOrEmpty(value) Then
                    e.Value = 0
                    e.ParsingApplied = True
                Else
                    Dim d as Decimal
                    If Decimal.TryParse(value, d) Then
                        e.Value = d
                        e.ParsingApplied = True
                    Else
                        e.ParsingApplied = False
                    End If
                End If
     
            End If
     
        End Sub
    J'ai aussi un peu modifié pour gérer proprement le cas où l'utilisateur a saisi autre chose qu'un nombre

  15. #55
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Ouii j'avais vu que s'était que pour la colonne débit mais je l'avais laissé ainsi à titre de teste. Donc évidement je l'avais expérimenté que pour le débit mais l'erreur est toujours là.
    Sachant que j'ai seulement deux colonnes numérique, le solde étant bloquer.
    Vraiment bizarre pourtant en relisant le code tous semble correct.

  16. #56
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut

    bizarre
    tu peux mettre un point d'arrêt (F9) au début de la méthode tope_CellParsing pour voir si ça rentre bien dedans ?

  17. #57
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    C'est allucinant en bidouillant j'ai trouvé : j'ai ajouté la même méthode sauf en fessant un "mixte de CellParsing et CellContentClick"
    Mais le truc c'est qu'elle ne fonctionne pas sans l'ancienne(la tienne).

    En gros pour fonctionner j'ai besoin d'écrire c'est deux méthodes :

    La tienne :

    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
     Private Sub tope_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles tope.CellParsing
     
            If e.ColumnIndex = DebitColumn.Index OrElse e.ColumnIndex = CreditColumn.Index Then
     
                Dim value As String = CType(e.Value, String)
                If String.IsNullOrEmpty(value) Then
                    e.Value = 0
                    e.ParsingApplied = True
                Else
                    Dim d As Decimal
                    If Decimal.TryParse(value, d) Then
                        e.Value = d
                        e.ParsingApplied = True
                    Else
                        e.ParsingApplied = False
                    End If
                End If
     
            End If
     
        End Sub
    et la mienne :

    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
    Private Sub tope_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) Handles tope.CellParsing
            If e.ColumnIndex = DebitColumn.Index OrElse e.ColumnIndex = CreditColumn.Index Then
     
                Dim value As String = CType(e.Value, String)
                If String.IsNullOrEmpty(value) Then
                    e.Value = 0
                    e.ParsingApplied = True
                Else
                    Dim d As Decimal
                    If Decimal.TryParse(value, d) Then
                        e.Value = d
                        e.ParsingApplied = True
                    Else
                        e.ParsingApplied = False
                    End If
                End If
     
            End If
        End Sub
    C'est sur moi j'ai la mauvaise habitude de fonctionner selon le principe "Tant que ça marche on s'enfiche" mais la je pense vraiment pas que tu sera d'accord

  18. #58
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Erreur de copier/coller ? tu as mis 2 fois la même méthode, elles sont exactement identiques

    Sinon, pourquoi ça s'appelle tope_CellContentClick alors que ça gère l'évènement CellParsing ?
    Certes, la méthode peut s'appeler n'importe comment, mais si le nom correspond pas à l'évènement on s'y retrouve plus...

  19. #59
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Oui en effet : erreur de copier / coller pour ta méthode, j'ai rectifié.

  20. #60
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    OK, mais ça change rien au problème... Ta méthode tope_CellContentClick gère l'évènement CellParsing (Handles tope.CellParsing), pas l'évènement CellContentClick. Donc tu gères 2 fois l'évènement CellParsing, avec exactement le même code...

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/09/2009, 07h15
  2. sauvegarder le contenu d'un dataGridView dans un fichier Xml
    Par gregcat dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/02/2008, 18h12
  3. DatagridView et fichier XML
    Par will2taz dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/06/2007, 09h59
  4. Réponses: 2
    Dernier message: 28/09/2006, 09h48
  5. [C#2.0]DatagridView + Chargement fichier XML
    Par chnew dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/04/2006, 12h35

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