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
Citation:
Pour corriger ceci, il faut modifier dans les sources du toolkit (fichier AutoCompleteBox.cs) la méthode UpdateTextCompletion
Code:
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:
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:
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.