Est-il possible d'avoir un tri personnalisé/ordre d'affichage dans un combox ? Dire que je veux une valeur spéciale "MasterValue" avant tous les autres.
Au lieu d'ajouter des cordes, créer une classe qui implémente IComparable et remplace ToString.
Ajouter des instances de cette classe à votre zone de liste déroulante
Ok mais je veux encore "MasterValue" comme valeur affichée et de tri selon les méthodes ToString() d'un objet à l'exception de la "MasterValue" qui devrait être sur le dessus. Est-ce que votre réponse faire l'affaire? L'idée est que la zone de liste déroulante trie les éléments de l'appel de la CompareTo fonction de l'interface IComparable. Ce que vous avez à faire est de créer un wrapper autour de la classe String. Le ToString retourne la Chaîne de caractères que vous voulez dans la zone de liste déroulante et le CompareTo vous permet d'avoir l'ordre souhaité. Si la Chaîne est "MasterValue" la CompareTo toujours revenir a < 0 et "MasterValue" est toujours la première. Cela n'a pas fonctionné pour moi .NET 3.5. Le Système.De Windows.Les formulaires.Liste déroulante a son interne ItemComparer classe qui appelle en fait la GetItemText() de la propriété qui appelle ToString() au lieu de l'interface IComparable. Je fais la même expérience dans le Cadre de 2. La fonction IComparable.CompareTo n'est jamais appelé bien que la zone de liste déroulante.Triés = true. Cette réponse est fausse. IComparable ne sera jamais appelé! (Cadre 4) Pourquoi est-ce accepté de répondre à 4-votes ???
Créer une source de données comme un point de vue (c'est à dire une procédure stockée) qui retourne un champ supplémentaire évalué 1.
Alors d'obtenir la source de données, et d'ajouter une ligne supplémentaire à la vue de données, avec le champ supplémentaire évaluée à 0.
Ensuite trier la vue, par ce domaine d'abord, et ensuite par la description du champ.
Ce sera toujours, puis de mettre votre "Maître de la Valeur" d'abord, puis de trier les autres par ordre alphabétique.
privatevoidPopulateCombo(){//get data view that returns 3 columns, //master sort column set to 1, id, and description //DataView view =GetSource();//add a new row to the data source that has column values//0 for master sort column (all others are returned 1//an appropriate ID and a description//data view columns = master sort column, id, description
view.Table.Rows.Add(newobject[]{0,1,"MasterValue"});//sort first by master column then description //
view.Sort="MasterSortColumn ASC, Description ASC";
combo.DataSource= view;
combo.ValueMember="Id";
combo.DisplayMember="Description";}
Au lieu d'ajouter des cordes, créer une classe qui implémente IComparable et remplace ToString.
Ajouter des instances de cette classe à votre zone de liste déroulante
L'idée est que la zone de liste déroulante trie les éléments de l'appel de la CompareTo fonction de l'interface IComparable. Ce que vous avez à faire est de créer un wrapper autour de la classe String. Le ToString retourne la Chaîne de caractères que vous voulez dans la zone de liste déroulante et le CompareTo vous permet d'avoir l'ordre souhaité. Si la Chaîne est "MasterValue" la CompareTo toujours revenir a < 0 et "MasterValue" est toujours la première.
Cela n'a pas fonctionné pour moi .NET 3.5. Le Système.De Windows.Les formulaires.Liste déroulante a son interne ItemComparer classe qui appelle en fait la GetItemText() de la propriété qui appelle ToString() au lieu de l'interface IComparable.
Je fais la même expérience dans le Cadre de 2. La fonction IComparable.CompareTo n'est jamais appelé bien que la zone de liste déroulante.Triés = true.
Cette réponse est fausse. IComparable ne sera jamais appelé! (Cadre 4) Pourquoi est-ce accepté de répondre à 4-votes ???
OriginalL'auteur
Le code suivant fera l'affaire.
De créer une liste des articles que vous souhaitez trier et ensuite utiliser AddRange.
OriginalL'auteur Koekiebox
Créer une source de données comme un point de vue (c'est à dire une procédure stockée) qui retourne un champ supplémentaire évalué 1.
Alors d'obtenir la source de données, et d'ajouter une ligne supplémentaire à la vue de données, avec le champ supplémentaire évaluée à 0.
Ensuite trier la vue, par ce domaine d'abord, et ensuite par la description du champ.
Ce sera toujours, puis de mettre votre "Maître de la Valeur" d'abord, puis de trier les autres par ordre alphabétique.
OriginalL'auteur Jayden