2009-09-20 7 views
2

J'ai une application qui fonctionne sur un appareil portatif avec .NET compact framework, en utilisant C# .NET. Le problème auquel je suis confronté est que le contrôle ComboBox se comporte très peu, parfois il montre le contenu mais parfois il montre juste le type de chaîne de System.DataRow dans ComboBox. Bien qu'il affiche cette chaîne System.DataRow mais il a toujours ses valeurs. J'ai un événement selectedIndexChanged sur la liste déroulante et il renvoie la bonne valeur même l'interface utilisateur affiche System.DataRow comme affichage.Contrôle C# .NET ComboBox

Merci d'avance. Vive.

+2

Est-il possible que votre tableau de données ne contienne pas de colonne avec le nom 'nom' dans certains cas? Comme MusiGenisis a souligné que la méthode ToString() sera appelée si le membre d'affichage en question est absent. La table de données est-elle remplie avec la même requête dans tous les cas? L'affichage d'un peu plus de code pourrait aider à résoudre votre problème. – Phaedrus

Répondre

1

Merci pour votre aide. J'ai compris le problème. Le scénario consistait donc à remplir une zone de liste déroulante avec les valeurs de la base de données. Requête de base de données me renvoyait trois colonnes ID, nom, taille. Mais j'avais besoin de seulement 2 colonnes Nom et ID pour combobox. Je recevais des valeurs de la base de données, puis j'ajoutais une nouvelle ligne côté client dans cette base de données avant de la remplir dans la zone de liste déroulante. Dans cette ligne côté client, j'ajoutais seulement 2 colonnes Nom et ID mais pas la taille. Et cette chose bourrait tout. C'est bizarre mais ça marche bien maintenant. Je pense que je vais faire d'autres tests et voir si cette erreur se reproduit.

Merci pour l'aide de toute façon.

3

Dans le code qui charge votre ComboBox, vous avez probablement quelque chose qui ressemble à ceci:

foreach (DataRow row in YourDataTable.Rows) 
{ 
    YourComboBox.Items.Add(row); 
} 

Vous chargez essentiellement chaque DataRow entier dans votre zone de liste déroulante et le ComboBox est l'utilisation par défaut toString DataRow (), qui est "System.Data.DataRow". Vous devez charger votre place ComboxBox avec l'un des du DataRow champs, comme ceci:

foreach (DataRow row in YourDataTable.Rows) 
{ 
    YourComboBox.Items.Add(row["column1"].ToString()); 
} 

Mise à jour: Vous pouvez avoir une faute de frappe dans votre propriété DisplayMember. Ce code:

DataTable dt = new DataTable(); 
dt.Columns.Add("ID"); 
dt.Columns.Add("Name"); 
dt.Rows.Add(1, "Bob"); 
dt.Rows.Add(2, "Doug"); 
dt.Rows.Add(3, "Beth"); 
comboBox1.ValueMember = "ID"; 
comboBox1.DisplayMember = "Name"; 
comboBox1.DataSource = dt; 

fonctionne correctement, comme prévu, mais DisplayMember est sensible à la casse, donc si je change la deuxième à la dernière ligne:

comboBox1.DisplayMember = "name"; 

tous les éléments dans la zone de liste déroulante dire "System.Data.DataRowView". Je pense que vous avez juste besoin de vérifier vos noms de colonnes.

+0

Salut MusicGenesis, Merci pour la réponse rapide, mais je ne suis pas en train de mettre des éléments en utilisant une boucle dans la zone de liste déroulante, mais j'y affecte DataSource. this.combobox.DisplayMember = "Nom"; this.combobox.ValueMember = "ID"; this.combobox.DataSource = DataTableName; – Zinx

Questions connexes