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

Silverlight Discussion :

Problème de sélection dans un Autocompletebox


Sujet :

Silverlight

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut Problème de sélection dans un Autocompletebox
    Je vous présente mon problème succinctement :

    -J'ai besoin de sélectionner une ville (CP/NOM) à partir d'une chaîne de caractère pouvant correspondre au nom ou bien au cp.

    -La sélection se fait bien sauf su les noms de ville correspondant à plusieurs CP. Après recherche j'ai trouver ceci : Problème de sélection dans un AutoCompleteBox lorsque le ValueMemberBinding n'est pas unique

    Pour corriger ceci, il faut modifier dans les sources du toolkit (fichier AutoCompleteBox.cs) la méthode UpdateTextCompletion

    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
     
    ...
    else
    {
      // Un item de la listbox a été sélectionné
      if ((SelectionAdapter != null) && (SelectionAdapter.SelectedItem != null))
      {
        // Car la recherche par texte fait perdre l'objet sélectionné dans le cas de doublons
        newSelectedItem = SelectionAdapter.SelectedItem;
      }
      else
      {
         // Perform an exact string lookup for the text. This is a 
         // design change from the original Toolkit release when the 
         // IsTextCompletionEnabled property behaved just like the 
         // WPF ComboBox's IsTextSearchEnabled property.
         //
         // This change provides the behavior that most people expect
         // to find: a lookup for the value is always performed.
         newSelectedItem = TryGetMatch(text, _view, AutoCompleteSearch.GetFilter(AutoCompleteFilterMode.EqualsCaseSensitive));
      }                 
    }
    Mais cette solution ne me convient pas car je n'aime pas modifier les codes sources qui ne m'appartiennent pas.

    -J'ai donc crée un champ VILLE_NOM_CP de la façon suivante :

    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
    using System;
     
    namespace Projet1.Web
    {
        public partial class VILLE
        {
            public string VILLE_NOM_CP
            {
                get
                {
                    return VILLE_NOM + " (" + VILLE_CP + ")";
                }
                set
                {
     
                }
            }
        }
    }
    -Mon problème à lieu sur le chargement de la liste de l'AutoCompleteBox.

    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
    private void vILLE_Populating(object sender, PopulatingEventArgs e)
            {
                vILLE_ENLDomainDataSource.Clear();
                e.Cancel = true;
                AutoCompleteBox sd = sender as AutoCompleteBox;
                vILLE_ENLDomainDataSource.SortDescriptors.Clear();
                vILLE_ENLDomainDataSource.FilterDescriptors.Clear();
                vILLE_ENLDomainDataSource.SortDescriptors.Add(
                    new SortDescriptor("VILLE_NOM", System.ComponentModel.ListSortDirection.Ascending));
                vILLE_ENLDomainDataSource.SortDescriptors.Add(
                    new SortDescriptor("VILLE_CP", System.ComponentModel.ListSortDirection.Ascending));
                vILLE_ENLDomainDataSource.FilterDescriptors.Add(
                    new FilterDescriptor("VILLE_NOM_CP", FilterOperator.StartsWith, vILLE_NOM_ENLAutoCompleteBox.Text));  /// Il m'indique ici que le champ n'existe pas
                vILLE_ENLDomainDataSource.FilterDescriptors.Add(
                    new FilterDescriptor("VILLE_CP", FilterOperator.StartsWith, vILLE_NOM_ENLAutoCompleteBox.Text));
                vILLE_ENLDomainDataSource.FilterOperator = FilterDescriptorLogicalOperator.Or;
                vILLE_ENLDomainDataSource.Load();
            }
    Si quelqu'un à une idée, voir même une solution totalement différente de ma piste de recherche.

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Ajoute l'attribut [DataMember] à ta propriété VILLE_NOM_CP et fait un rebuild. Normalement, ça devrait aller.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Je viens d'essayer ta proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    namespace FleetManager.Web
    {
        public partial class VILLE
        {
            [DataMember]  //Voici le rajout du DataMember
            public string VILLE_NOM_CP
            {
                get { return VILLE_NOM + " (" + VILLE_CP + ")"; }
                set { throw new NotImplementedException(); }
            }
        }
    }
    J'ai une erreur

    System.ServiceModelDomainServices.Client.DomainOperationException: Échec de l'opération Load pour la requête " GetVILLE ". Le membre de type spécifié "VILLE_NOM_CP" n'est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d’entité et les propriétés de navigation d'entité sont pris en charge.
    Es que j'aurai bien placer le DataMember???

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    OK, je crois que je vois le problème...Pour ces requêtes, Linq to Entities a besoin que la propriété soit liée à une colonne.

    Essaye en créant une colonne calculée (computed column) dans la table de ta BD. Puis fait un refresh de ton modèle :

    http://www.mssqltips.com/sqlserverti...sisted-values/
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup GuruuMeditation

    Je viens donc de crée cette requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE [dbo].[VILLE]
    ADD VILLE_NOM_CP AS VILLE_NOM + ' (' + VILLE_CP + ')'
    GO
    J'ai ensuite garder mon champ dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            [DataMember]
            public string VILLE_NOM_CP
            {
                get { return VILLE_NOM + " (" + VILLE_CP + ")"; }
                set {  } //throw new NotImplementedException();
            }
    et j'ai ensuite mappé la nouvelle colonne avec comme nom VILLE_NOM_CP_2.

    Dans mon code Silverlight j'utilise l'attribue VILLE_NOM_CP, mais j'effectue le filtre sur la colonne VILLE_NOM_CP_2.

    Merci encore.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/03/2011, 10h55
  2. Problème de sélection dans des Jtables
    Par Manaka dans le forum Composants
    Réponses: 1
    Dernier message: 29/10/2006, 22h15
  3. [FLASH 8] Problème de sélection dans une liste
    Par jpboogie dans le forum Flash
    Réponses: 3
    Dernier message: 29/09/2006, 14h12
  4. Problème de sélection dans un BDD
    Par calenfeaion dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/09/2006, 16h54
  5. Problème de sélection dans une listbox
    Par cacahuèèète dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 15h03

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