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 :

[VS2008]suppression d'une ligne de datatable impossible


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut [VS2008]suppression d'une ligne de datatable impossible
    ...car VS me dit que la ligne n'est pas dans la datatable!

    (bonjour)

    voici le code de la procedure, qui est un gestionnaire d'évenements chargé de l'impresion:

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    Private Sub myPD_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles myPD.PrintPage
     
     
            If nb_cat = 0 Then
                e.HasMorePages = False
            ElseIf nb_cat = 1 Then
     
     
                'récuperation du nom de la seule cat
                Dim nom_cat As String = dt_cat_off.Rows(0).Item("nom_cat")
                'je suppose qu'il y a tjrs un panel avec le nom de la cat
                'd'où le contrôle panel de cette catégorie
                Dim la_cat As Control
                For Each ctl As Control In Me.Controls
                    If TypeOf (ctl) Is Panel And ctl.Name = nom_cat Then
                        la_cat = ctl
                    End If
                Next
     
                'puis les contrôles de ce panel
                For Each ctl2 As Control In la_cat.Controls
                    e.Graphics.DrawString(ctl2.Text, SystemFonts.DefaultFont, Brushes.RoyalBlue, ctl2.Left, _
                                          ctl2.Top)
     
                Next
                'suppression ds dt_cat_off de cette cat
                Dim dt_a_eff As DataSet1.catRow = ta_cat. _
                                    get_cat_sup(la_cat.Name, supermarche.nom_sup).Rows(0)
     
                dt_cat_off.RemovecatRow(dt_a_eff)
     
                e.HasMorePages = False
     
     
     
            ElseIf nb_cat >= 2 Then
     
                Dim nom_cat1 As String = dt_cat_off.Rows(0).Item("nom_cat")
                'je suppose qu'il y a tjrs un panel avec le nom de la cat
                'd'où le contrôle panel de cette catégorie
                Dim la_cat1 As Control
                For Each ctl As Control In Me.Controls
                    If TypeOf (ctl) Is Panel And ctl.Name = nom_cat1 Then
                        la_cat1 = ctl
                    End If
                Next
     
     
                Dim nom_cat2 As String = dt_cat_off.Rows(1).Item("nom_cat")
                'je suppose qu'il y a tjrs un panel avec le nom de la cat
                'd'où le contrôle panel de cette catégorie
                Dim la_cat2 As Control
                For Each ctl As Control In Me.Controls
                    If TypeOf (ctl) Is Panel And ctl.Name = nom_cat2 Then
                        la_cat2 = ctl
                    End If
                Next
     
                '2e étape
                'puis les contrôles de ce panel
                For Each ctl2 As Control In la_cat1.Controls
                    e.Graphics.DrawString(ctl2.Text, SystemFonts.DefaultFont, Brushes.RoyalBlue, ctl2.Left, _
                                          ctl2.Top)
     
                Next
                'suppression ds dt_cat_off de cette cat
                Dim dt_a_eff As DataSet1.catRow = ta_cat. _
                                    get_cat_sup(la_cat1.Name, supermarche.nom_sup).Rows(0)
     
                dt_cat_off.Rows.Remove(dt_a_eff)
     
                '3e étape
                'puis les contrôles de ce panel
                For Each ctl2 As Control In la_cat2.Controls
                    e.Graphics.DrawString(ctl2.Text, SystemFonts.DefaultFont, Brushes.RoyalBlue, 400 + ctl2.Left, _
                                          ctl2.Top)
     
                Next
                'suppression ds dt_cat_off de cette cat
                Dim dt_a_eff2 As DataSet1.catRow = ta_cat. _
                                    get_cat_sup(la_cat2.Name, supermarche.nom_sup).Rows(0)
     
                dt_cat_off.RemovecatRow(dt_a_eff2)
     
     
                e.HasMorePages = True
            End If
     
     
        End Sub
    je le commente un peu...

    la procédure doit afficher des catégories comprenant des produits.
    Par exemple le supermarché AUCHAN comprend des catégories légumes,fruits, cette dernière comprenant les produits poires, oranges.
    je veux afficher deux catégories par page (c'est plus facile), voilà la raison du test sur nb_cat( à ajouter aux commandes e.hasmorepages plus bas dans le code).

    Les catégories se trouvent dans la datatable dt_cat_off, qui est une variable publique, à partir de cette info, je récupère le contrôle panel du formulaire, contrôle panel qui correspond à cette catégorie. Ce panel contient en effet les produits déjà disposés et je réutilise les placements du formulaire dans la feuille imprimée.voilà, je crois que c'est un peu compliqué à décrire.

    donc je récupère dans la variable la_cat la catégorie (=panel), puis j'obtiens les contrôles situés dans cette catégorie, et je les transmets à la variable e (avec drawstring).

    ensuite, je supprime de dt_cat_off la catégorie précitée, comme cela dans dt_cat_off j'ai à chaque appel de la méthode gestionnaire d'événement la liste des catégories qu'il me reste à afficher.l'appel à get_cat_sup marche (j'ai testé avec le débogueur) et j'obtiens une erreur dans la ligne --> dt_cat_off.RemovecatRow(dt_a_eff)

    VS me dit:
    The given DataRow is not in the current DataRowCollection.
    savez_vous où se trouve l'erreur ?

    merci,

    lolveley.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    pfft...pas de réponse.

    reportez-vous à mon post plus récent pour le problème évoqué,

    lolveley.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/06/2015, 07h19
  2. probleme de suppression d'une ligne de datatable
    Par dev_newbie dans le forum JSF
    Réponses: 6
    Dernier message: 28/10/2009, 16h25
  3. Réponses: 0
    Dernier message: 22/08/2009, 13h04
  4. [JTable] problème après suppression d'une ligne
    Par fredo3500 dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2005, 10h01
  5. Réponses: 6
    Dernier message: 04/03/2004, 09h35

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