none
Comment savoir, avec un Datagrid, si la selection est sur une nouvelle ligne ? RRS feed

  • Question

  • Bonjour
    Je n'arrive pas a savoir comment identifier dans mon datagrid lorsque ma selection est sur une nouvelle ligne.
    Lorsque je suis sur une ligne existante la commande suivante me retrourne False (Correct):

     

    this.DataGrid.SeletedRows[0].IsNew

    Mais lorsque je suis sur une nouvelle ligne j'ai une exception: Out of Bounds array Index

    Une solution ?
    Thanks
    lundi 20 juillet 2009 15:27

Réponses

  • Je vais gérer ça par les index
    Si mon this.DataGrid.MouseDownHitTestInfo.Row me retourne un index supérieur au count de this.DataGrid.CurrentView.Table.Rows.count alors c'est que je suis sur une nouvelle ligne (dans le cas où l'utilisateur n'a pas selectionner de cellule sur la nouvelle ligne).

    Je vais également ajouter un test pour vérifier que le Datagrid autorise bien les nouvelles lignes

    Merci pour votre aide
    • Marqué comme réponse denfer mardi 21 juillet 2009 08:11
    mardi 21 juillet 2009 08:11

Toutes les réponses

  • Apres quelques essais je viens de voir que cette propriété ne fonctionne qui si on clique au préalable dans une cellule de la nouvelle ligne.
    la petit étoile dans l'entête de ligne se transforme alors en flèche et là ça fonctionne.

    Est ce que quelqu'un aurai donc une idée pour une solution dans le cas où l'on ne clique pas dans la cellule ?
    lundi 20 juillet 2009 15:34
  • Salut,

    Tu devrais utiliser un DataGridView à la place du DataGrid, puisque le DataGrid n'est plus supporté.

    Si je comprend bien, tu veux savoir lors d'un changement de ligne dans la grille si celle-ci est celle d'ajout?
    Microsoft MVP C# :: mongeon.devrpm.ca
    lundi 20 juillet 2009 15:40
    Modérateur
  • Je fais de la maintenance sur une veille appli qui utilise un Datagrid et c'est pour l'instant trop long, compliqué pour migrer vers le Datagridview

    Je veux savoir si la ligne selectionnée par l'utilisateur est nouvelle ou non

    J'avais donc ecris le code suivant mais qui ne fonctionne pas si on ne clique pas dans une cellule dans la nouvelle ligne: 
    int PrimaryKeyID;           
    if (!this.DataGrid.SeletedRows[0].IsNew)
          PrimaryKeyID = int.Parse(this.DataGrid.CurrentView.Table.Rows[this.DataGrid.MouseDownHitTestInfo.Row][this.PrimaryKey].ToString());  
    else
          PrimaryKeyID = -1;

     

     

     Ce code ne fonctionne que si on a la fleche dans l'en-tête de ligne or si tu clique direct dans l'en-tête sans selectionner au préalable une cellule l'etoile reste et le test ne fonctionne pas et généère une exception de type Out of bounds array index.
    Est ce que tu connais un moyen pour eviter cette exception et identifier que la selection est sur une nouvelle ligne ?

    lundi 20 juillet 2009 15:51
  • Bonsoir,

    si tu travaille avec une DataTable sous-jacente, tu pourrais t'appuyer sur la propriete DataRow. RowState

    Sinon, quelle est la structure de donnée que tu utilise?

    Fab'
    lundi 20 juillet 2009 22:11
  • Je vais gérer ça par les index
    Si mon this.DataGrid.MouseDownHitTestInfo.Row me retourne un index supérieur au count de this.DataGrid.CurrentView.Table.Rows.count alors c'est que je suis sur une nouvelle ligne (dans le cas où l'utilisateur n'a pas selectionner de cellule sur la nouvelle ligne).

    Je vais également ajouter un test pour vérifier que le Datagrid autorise bien les nouvelles lignes

    Merci pour votre aide
    • Marqué comme réponse denfer mardi 21 juillet 2009 08:11
    mardi 21 juillet 2009 08:11
  • Et si tu te déplaces avec les flèches du clavier, es-ce que cette évènement va être lancée?
    Microsoft MVP C# :: mongeon.devrpm.ca
    mardi 21 juillet 2009 11:43
    Modérateur