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

Windows Presentation Foundation Discussion :

[WPF] Multiple Sélection DataGrid


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Par défaut [WPF] Multiple Sélection DataGrid
    Bonjour,

    J'ai un problème avec ma datagrid. J'utilise une datagrid ou je liste un certains nombres d'objets.
    J'ai mis un bouton supprimer pour pouvoir supprimer les lignes voulu.
    Seulement voilà, pour une raison que j'ignore lorsque je veux lister les "DataGridRow" de ma DataGrid, il ne prend pas tout. En gros si je sélectionne imaginons, toute ma datagrid et que celle ci est très grosse, et bien il ne supprime que le début.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (int i = 0; i < datagridAnimes.Items.Count; i++)
    {
       DataGridRow row = (DataGridRow)datagridAnimes.ItemContainerGenerator.ContainerFromIndex(i);
       var columnCell = datagridAnimes.GetCell(row, 0);
       if (row.IsSelected)
       {
          string titreSelected = columnCell.ToString().Replace("System.Windows.Controls.DataGridCell: ", "");
          SupprimerAnime(titreSelected);
       }
    }
    (Le GetCell étant une méthode que j'ai récupéré d'ici : http://techiethings.blogspot.com/201...-and-cell.html)

    En gros, l'endroit ou ca coince, c'est cette ligne :
    DataGridRow row = (DataGridRow)datagridAnimes.ItemContainerGenerator.ContainerFromIndex(i);

    Imaginons qu'au lieu de i, je lui donne 58, y a des chances qu'il ne trouve pas la ligne, alors qu'elle existe bel et bien.
    Si je met 8 par contre, il trouvera...

    Alors, je ne sais pas trop d'où ca vient, une limite peut-être ?
    Si quelqu'un a une idée...

    Merci =)

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Par défaut
    Bon finalement, j'ai trouvé une solution tout seul.
    Désolé pour le topic inutile.

    J'ai fais comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i = 0; i < datagridAnimes.SelectedItems.Count; i++)
    {
       Anime animeSelected = datagridAnimes.SelectedItems[i] as Anime;
       SupprimerAnime(animeSelected.Titre);
    }
    Anime étant une classe que j'ai crée (La datagrid contient des instances de Anime).


    Par contre, si quelqu'un a une idée de pourquoi ma méthode précédente ne fonctionnait pas, je serais curieux de savoir ^^

  3. #3
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Au pif : parce que le DataGrid utilise un VirtualizingStackPanel, et qu'au moment où tu appelles le 58e élément, celui-ci n'étant pas affiché, il n'existe pas... ?

    C'est pour ce genre de raisons (en plus d'autres) qu'on évite de taper directement dans le code de l'UI comme tu le fais.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Par défaut
    "Au pif", désolé que ca me paraisse pas si évident u_u'

    Sinon, quelles sont les autres raisons ?

    Et j'aurais aimé savoir, qu'est ce que t'entend par taper dans le code de l'UI ?
    Coder dans la classe de ma fenêtre ?
    J'vois pas ce que ca aurait changé de coder dans une autre classe :o

  5. #5
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    "Au pif", c'est pas évident du tout non
    Je cherchais pas à te dénigrer : j'ai pas accès à ton code, alors c'est "au pif".

    Les autres raisons, c'est surtout que WPF n'est pas à l'origine conçu avec cet esprit d'aller "taper directement dans le code de l'UI".

    Ce que j'entends par là, quand tu fais dataGrid.SelectedItems... ou pire, avant : dataGrid.ItemsContainerGenerator...., tu tapes directement dans le code de l'UI, c'est à dire que ton code métier référence des éléments de l'interface.

    Ca pollue ton code métier, ça crée des dépendances entre ton code métier et ton interface, ça rend ton code difficile à maintenir.
    Par exemple, si demain, tes clients ne veulent plus une datagrid, mais une cardview, t'es bon pour te retaper tout le code métier dépendant de ta datagrid (directement ou indirectement), refaire les tests, revalider le code, etc...

    A côté de ça, entremêler le code métier et ton UI t'empêche de faire des tests automatisés sur ton appli (notamment pour détecter les régressions).

    Renseignes-toi sur le pattern MVVM et le binding.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Par défaut
    Ok, je te remercie.
    J'vais me renseigner sur ça =)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/11/2018, 15h04
  2. Problème multiple sélection dataTable
    Par ahmedpa dans le forum JSF
    Réponses: 1
    Dernier message: 03/04/2014, 14h43
  3. [Débutant] C# (& WPF) : application multipages, datagrid, selecteditem
    Par applibug dans le forum C#
    Réponses: 8
    Dernier message: 15/11/2011, 11h17
  4. Multiples sélections dans un gtk_text_view
    Par linunux dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 30/08/2011, 15h30
  5. [WPF] Alimenter une DataGrid
    Par Babas007 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 26/11/2010, 15h31

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