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

C# Discussion :

listbox chargée par source de donnée, refresh


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut listbox chargée par source de donnée, refresh
    Bonsoir,

    Comment puis je faire pour rafraîchir une listebox alimentée par une source de donnée, quand je supprime un élément de ma source de donnée ?

    merci d'avance...

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Salut,

    peut etre qu'il faut récupérer et garder le TopIndex de ta liste (index du premier element visible quand tu supprime un élément de ta liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void btnRemove_Click(object sender,EventArgs e)     {         int topIndex = listBox1.TopIndex;          m_BindingList.Remove(ElementASupprimer);          if(listBox1.Items.Count>topIndex)             listBox1.TopIndex = topIndex;     } 
     
    // m_BindingList est la liste mappée à ta listBox
    je t'invite à voir ce topic :

    http://stackoverflow.com/questions/2...fresh-problems

    Bonne courage

  3. #3
    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 : 43
    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
    Par défaut
    Quel est le type de ta DataSource ? Si c'est une DataTable ou une BindingList<T>, ça devrait se rafraichir automatiquement

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Alors je ne sais pas si c'est la bonne réponse mais c'est une ItemsSource="{ma source}"
    Issue d'une BD SQL serveur 2008.
    Et le refresh n'est pas auto.
    Par contre quand je selectionne la ligne que j'ai "visiblement" supp de ma base, il me retour dans des champs espion des NULL (normal me direz vous)

  5. #5
    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 : 43
    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
    Par défaut
    Citation Envoyé par d4voisin Voir le message
    Alors je ne sais pas si c'est la bonne réponse mais c'est une ItemsSource="{ma source}"
    Déjà ce serait utile de préciser la techno que tu utilises... Faute de précision, j'avais supposé que c'était Windows Forms, mais visiblement c'est WPF.

    D'autre part, ça ne nous apprend rien du tout sur la nature de la source... Je suppose que ItemsSource est défini par un binding, mais un binding sur quoi ?

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Ok...
    Je vais essayer de donner plus d'info. Je débute sur VS2010 (j'en fais depuis un mois).

    Donc je passe par Expression Blend 4 et je récup en modification csharp sous VS2010.

    ma base est sous SQL serveur 2008.

    Mon projet se découpe comme suit : un projet Bibliothéque où je récup ma BD grace à LINQ to SQL
    Un projet sous expression comme je l'ai dit, pour le design et en modification sous VS2010 avec un référence mon projet Biblio.

    Pour récupérer les données j'instancie une class ObservableCollection de string où mon constructeur récup une liste de string issu d'une requete LINQ du projet Biblio.

    Ensuite dans mon XAML de l'écran, la listebox recoit par ItemsSource ma liste de donnée (cf l'exemple : http://msdn.microsoft.com/fr-fr/libr...95).aspx#Y2466)

    J'espère que ça peut vous aider à comprendre ma mise en oeuvre (et d'ailleur au passage si vous trouvez que c'est trop lourd comme mise en forme je suis preneur d'info)

  7. #7
    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 : 43
    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
    Par défaut
    Bah si tu supprimes un élément de la ObservableCollection, l'affichage sera bien mis à jour... Par contre si tu supprimes simplement la ligne de la BDD sans mettre à jour la ObservableCollection, la ListBox n'a aucun moyen de savoir qu'un élément a été supprimé...

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Ok, donc Comment je fais pour mettre à jour ma collection? je la refais?

  9. #9
    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 : 43
    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
    Par défaut
    Citation Envoyé par d4voisin Voir le message
    Ok, donc Comment je fais pour mettre à jour ma collection? je la refais?
    Oui, par exemple...

    Ou alors, quand tu supprimes une ligne de la BDD, tu enlèves aussi l'élément correspondant de la ObservableCollection

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Mais comment je fais pour toucher à la collection qui est créée par un constructeur lui même appelé dans du XAML?
    Je n'ai pas la main dessus?

  11. #11
    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 : 43
    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
    Par défaut
    Citation Envoyé par d4voisin Voir le message
    Mais comment je fais pour toucher à la collection qui est créée par un constructeur lui même appelé dans du XAML?
    Je n'ai pas la main dessus?
    Montre ton code, là je vois pas ce que tu veux dire...

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Ok, je te le poste ce soir. Je ne l'ai pas sous la main au taf.
    Merci pour l'intérêt que tu portes à me répondre

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Donc en XAML j'ai sur ma fenetre :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Window.Resources>
      <local:MaListe x:Key="Maliste"/>
    </Window.Resources>
     
    <ListBox ... ItemsSource="{StaticResource MaListe}" ... />

    Et dans mon csharp :

    Code c# : 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
    namespace WPF1
    {
      class MaListe : OsbservaleCollection<string>
      {
        public MaListe()
        {
          List<string> list_DATA = new List<string>
          DBDataClasses db = new DBDataClasses();
     
          list_DATA = dataTrucDATA.lire_TrucDB(db);
          foreach(string s in list_DATA)
          {
             Add(s);
          }
        }
      }
    }

    Voilà mon code (dsl pour la mise en forme).

    Qu'en penses tu?

  14. #14
    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 : 43
    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
    Par défaut
    Tu ne devrais pas faire comme ça... instancier à partir du XAML un truc qui va accéder à la BDD, c'est pas très propre. Un des gros avantages de WPF est qu'on peut facilement séparer le code métier du code de l'interface graphique, notamment grâce au pattern MVVM.

    Il vaudrait mieux que tu crées la liste manuellement en code (dans le code-behind ou dans le ViewModel si tu utilises le pattern MVVM), et que tu l'affectes au ItemsSource de ta ListBox (explicitement ou via un binding). Comme ça tu pourras facilement la recréer.

    Citation Envoyé par d4voisin Voir le message
    (dsl pour la mise en forme).
    Il y a les balises CODE pour ça
    (je les ai ajoutées dans ton message)

  15. #15
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    C'est bizarre que tu me dises que c'est pas propre car je l'ai 'pompé' de la MSDN...
    Mais je vois ce que tu veux dire. Je vais essayer ce soir et si ça marche je tag en résolu.

    Merci pour le balisage et merci d'avoir prit le temps de répondre

  16. #16
    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 : 43
    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
    Par défaut
    Citation Envoyé par d4voisin Voir le message
    C'est bizarre que tu me dises que c'est pas propre car je l'ai 'pompé' de la MSDN...
    Les exemples de MSDN ne sont pas toujours très pertinents... Tu as encore le lien de la page en question ?

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38

  18. #18
    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 : 43
    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
    Par défaut
    Citation Envoyé par d4voisin Voir le message
    ton lien marche pas...

  19. #19
    Membre averti
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    Tu peux le retrouver dans mon poste d'hier à 16h33 lui fonctionne

  20. #20
    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 : 43
    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
    Par défaut
    Citation Envoyé par d4voisin Voir le message
    Tu peux le retrouver dans mon poste d'hier à 16h33 lui fonctionne
    OK... je confirme, l'exemple de MSDN est vraiment pourri
    Enfin c'est surtout que ça ne correspond pas du tout à un cas d'utilisation réelle...

Discussions similaires

  1. [LibreOffice][Tableur] [Macro] - Boite de dialog avec listBox chargé par plage nonnées
    Par madvic dans le forum OpenOffice & LibreOffice
    Réponses: 17
    Dernier message: 13/04/2015, 00h19
  2. Source de données polluée par des espaces
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/03/2008, 17h00
  3. Réponses: 1
    Dernier message: 25/02/2008, 13h50
  4. Réponses: 12
    Dernier message: 08/05/2006, 13h57
  5. source de données d'une listbox?
    Par gdkenny dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/03/2006, 17h11

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