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 :

Problème ligne vide ajoutée dans Datagridview [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut Problème ligne vide ajoutée dans Datagridview
    Bonjour à tous,

    Je reviens vers vous car je suis confronté à un petit soucis....
    J'ai crée un Datagridview avec de coché "Activer l'ajout".
    De ce fait, il y a toujours une ligne vide avec la croix dans l'index de cette ligne.
    Ok jusque là.
    J'ai crée un menu contextuel qui s'active lorsque l'utilisateur fait un clic-droit sur une ligne. Si l'utilisateur choisit d'ajouter une nouvelle ligne de données, j'utilise alors l'insertion de cette manière après que l'utilisateur est saisi des données dans un Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Form1.SuppressionbindingSource.DataSource.Rows.Add(New Object() {sitechoisi, supprime.Text, _
                                 date.Text, arrivee, depart, _
                                passage, emetteur.Text, observation.Text, "SUPP"})
                        Form1.SuppressionbindingSource.Position = Form1.SuppressionbindingSource.Count - 1
                        Form1.SuppressiondataAdapter.Update(CType(Form1.SuppressionbindingSource.DataSource, DataTable))
    Tout marche nickel tant que l'utilisateur n'a pas présélectionné la fameuse ligne avec l'étoile avant d'activer le choix d'insérer des données.

    Par contre si l'utilisateur sélectionne cette fameuse ligne, clic droit "ajouter", remplit son Form et valide, les données s'intègrent bien dans la BDD et le Datagridview mais il me rajoute ensuite une ligne vide et ensuite la fameuse ligne avec l'étoile ..... Pourquoi me rajoute-t-il cette ligne entièrement vide et qu'elle ne me met pas simplement directement la ligne avec l'étoile ?

    Merci pour votre aide

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Pourquoi me rajoute-t-il cette ligne entièrement vide et qu'elle ne me met pas simplement directement la ligne avec l'étoile ?
    Par Defaut, MyDataGridView.AllowUserToAddRow=true.
    Si on met cette propriété à false, on ne verra plus la ligne vide en fin de grid.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Hello,

    Merci pour ta réponse. J'avais entre-temps vu qu'on pouvait supprimer cette ligne en changeant la propriété. L'ajout/modif/suppression dans le datagridview ne se fait que via des forms activés dans le menu contextuel. L'utilisateur sélectionne la ligne puis fait son choix. Avec le 1er code ci-dessous, si l'utilisateur sélectionnait la dernière ligne avec l'étoile, rien ne se passait s'il choisissait modif/suppression Par contre pour saisir une nouvelle ligne, le choix ajout restait actif et ouvrait un form à remplir (pour permettre aussi la saisie si le tableau est vide initialement). Et comme dit dans mon premier message, si l'utilisateur sélectionne la ligne avec l'étoile puis veut faire une nouvelle saisie et valide son form. le tableau se remplit ainsi :

    Ligne avec données
    Ligne vide
    Ligne vide avec l'étoile dans l'index

    Cette ligne entièrement vide qui s'intercale sème ensuite la zizanie....Si l'utilisateur clique simplement sur le tableau, cette ligne intercalée disparait. Mais dès qu'il fait une modif, ajout, etc ... il reçoit toujours les alertes concernant les clés primaires (comme cette ligne fantôme est vide)

    Par contre, mon code était un peu construit en tenant compte de cette ligne avec l'étoile (propirété à true).
    Par exemple avant de supprimer une ligne sélectionnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Me.SuppressionDataGridView.SelectedRows.Count > 0 AndAlso _
                               Not Me.SuppressionDataGridView.SelectedRows(0).Index = _
                                   Me.SuppressionDataGridView.Rows.Count - 1 Then
     
    ......
    end if
    Puis-je alors enlever cette condition et le remplacer par ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = SuppressionDataGridView.CurrentRow.Index
                    If i <> -1 Then
    Sinon j'ai compris que la première colonne après l'index est 0 mais j'ai un peu du mal avec les lignes .... Si je prends le petit bout que j'ai mis, -1 correspondrait alors à la ligne ou il y a les entêtes des colonnes ?

    Comme dit, maintenant la ligne d'ajout avec l'étoile me permettait de rendre actif mon menu contextuel. Si je mets la propriété que tu suggères à false, il n'y a plus de menu contextuel ....

    Merci pour ta future aide.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Re,

    J'ai réalisé plusieurs tests...
    Lorsque l'utilisateur clique sur l'index d'une ligne, , le curseur se positionne sur la ligne. Si ce curseur est sur la même ligne que celle avec l'étoile et qu'il fait une insertion via le formulaire. A la validation, celà génère différentes erreurs d'index, etc ....

    Mon form principal est fait d'index(Tabcontrol). J'ai remarqué que si je clique sur le même index, le curseur se repositionne sur la dernière ligne ou il y a des données.
    Si mon tableau est vide, il n'y a que la ligne avec *. si on la sélectionne, le curseur apparait sur cette ligne et le fait de recliquer sur mon index, il disparait mais la ligne reste en bleu. Mais dans ce cas, si je fais une insertion de données, je n'ai plus de message d'erreur.

    La solution serait de simuler un clic sur l'index actif. Je n'ai pas trouvé comment faire. L'autre solution serait de repositionner ce curseur comme je l'ai décrit et je n'aurais plus de problèmes...

    Je suis preneur d'une solution. Merci d'avance pour votre aide

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Je mettrai AllowUserToAddRow à false et je mettrai dans le menu contextuel associé au click sur une ligne les possibilités suivantes :
    - Modify Current Row,
    - Delete Current Row,
    - Add New Row.

    Il faut éventuellement prévoir un menu contextuel sur une DataGridView vide permettant d'ajouter une new Row.

    Il vaut mieux utiliser CurrentRow plutot que SelectedRows.

    Le click sur une TabPage devrait rien faire d'autre qu'un changement d'onglet sans intrgir avec la DataGridView.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Salut,

    Merci pour ta réponse. Dans mon menu contextuel, j'ai prévu ajout/modifier/supprimer. Puis Si le tableau est vide, j'ai un bouton dédié pour créer une nouvelle ligne.

    Le soucis est que si je retire la propriété au Datagridview, je devrais modifier dans plusieurs modules/fonctions mes boucles étant donné que je tenais compte de cette fameuse ligne d'insertion.

    Concernant l'index du Tabcontrol, j'ai remarqué que si je sélectionnais cette fameuse ligne dans le Datagridview, elle passe en bleu et le curseur se positionne dessus. Si je reclique sur l'index du tabcontrol, oui la ligne sélectionnée reste en bleu. Par contre le curseur se positionne sur le dernier enregistrement du Tableau, voir il disparait si le tableau est vide. Et alors je n'ai plus de soucis lorsque j'insère une nouvelle ligne.
    Ce fameux curseur est-il lié au datagridview ou aux données de ma Datatable ou bindingsource ? De mes deux suggestions, aucune n'est possible ?

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

Discussions similaires

  1. Ajout de ligne par programme dans Datagridview
    Par Sicyons dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/08/2014, 12h46
  2. [AC-2007] Import Excel lignes vides ajoutées
    Par AndréPe dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/12/2010, 11h50
  3. [AC-2002] problème liste déroulante ajout dans table
    Par special-k dans le forum IHM
    Réponses: 9
    Dernier message: 01/10/2010, 18h25
  4. Réponses: 3
    Dernier message: 09/08/2007, 13h44
  5. [VB.net] Exécuter code après ajout dans datagridview
    Par collaud_vb dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/09/2006, 11h45

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