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.
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