2010-05-16 12 views
1

Comment puis-je avoir une zone de liste déroulante avec plusieurs champs de sa source de données en tant que membre d'affichage sans ajouter de colonnes supplémentaires à sa source de données? Je veux dire que je veux avoir un combobox avec displaymember comme "ID" + "-" "Nom".
1 - Noir
2 - Blanc
3 - Rouge.Net: comment puis-je avoir une zone de liste déroulante avec plusieurs champs de sa source de données en tant que Displaymember?

Je ne veux pas ajouter colonne supplémentaire à sa source de données.

Merci

+1

Pourriez-vous expliquer plus en détail, par ex. avec un exemple? –

+0

ok, supposons que nous ayons une table dans le serveur Sql appelée table1. table1 a 2 colonnes: ID et nom. == table1: 1 Noir 2 Blanc 3 Rouge Je veux pour remplir un ComboBox sur ma forme avec une table de données nommée TB1 d'une manière que la propriété DisplayMember de mon combobox être « ID » + « - » + "Prénom". – odiseh

Répondre

0

Utilisez une instruction select pour obtenir les données plutôt que de simplement obtenir tout de la table et écrire quelque chose comme:

SELECT ID, STR(ID) + ' - ' + Name DisplayName FROM table1 

Ensuite, identifiant de l'ensemble en tant que membre de données et DisplayName comme membre d'affichage.

Non testé, mais il semble que cela devrait fonctionner.

1

La liaison à plusieurs propriétés n'est pas prise en charge (dans WinForms). Vous devez étendre votre DataTable avec une colonne calculée et lier à cette nouvelle colonne.

dataTable.Columns.Add("IdAndName", typeof(String), "ID + Name"); 

comboBox.DataSource = dataTable; 
comboBox.DisplayMember = "IdAndName"; 

Voir la MSDN de référence sur les expressions valides pour les colonnes calculées. Peut-être que vous devez utiliser Convert.

dataTable.Columns.Add("IdAndName", typeof(String), "Convert(ID, 'System.String') + Name"); 
0

Options:
1) Modifier votre appel de données pour inclure la colonne combinée, à savoir que vous ne seriez pas « ajouter » une colonne en tant que tel, vous auriez sélectionnerez les deux colonnes comme indiqué par ho
2) Passer à un ListView
3) Ajouter les résultats de votre appel de données à une classe de collection qui a les champs que vous voulez afficher (ID, DisplayName) et ajouter une propriété "IDDisplayNameCombined" qui les combine et lie collecte dans la liste déroulante et utilisation de la nouvelle propriété combinée en tant que displaymember

0

Je viens de trouver une solution cool à ce même problème et j'ai pensé que je le mettrais ici.
Si vous ne définissez pas DisplayMemeber, la zone de liste déroulante appelle la méthode ToString de vos objets source. Donc, tout ce que vous devez faire est de surcharger la méthode ToString, et voilá!

public override string ToString() 
{ 
    return string.Format("{0} - {1}", ID, Name); 
} 

Espérons que ça aide!