Maison  >  Article  >  base de données  >  Pourquoi ma liste WinForms affiche-t-elle \"System.Data.DataRowView\" au lieu des valeurs attendues ?

Pourquoi ma liste WinForms affiche-t-elle \"System.Data.DataRowView\" au lieu des valeurs attendues ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 14:55:30690parcourir

Why Does My WinForms Listbox Show

Démêler le mystère de "System.Data.DataRowView" dans les zones de liste WinForms

Rencontrer "System.Data.DataRowView" lorsque vous attendez des valeurs réelles dans votre liste WinForms peut être embarrassant. Voici une exploration approfondie du coupable :

Votre code interagit avec une base de données, récupère des données à l'aide d'un adaptateur de données MySQL et d'un adaptateur, et attribue les données à un DataTable. Le DisplayMember de la Listbox est défini sur « NameAndScore » et le DataTable sert de source de données de la Listbox.

La cause première réside dans le type de données attribuées à la Listbox. Lors de la liaison de données à une Listbox, vous spécifiez généralement une chaîne ou un objet comme DisplayMember. Chaque élément de la Listbox est ensuite créé en utilisant la valeur du DisplayMember à partir des données liées.

Dans votre code, le DisplayMember est "NameAndScore", qui est une colonne calculée dans votre requête SQL. Cette colonne combine deux valeurs, « Nom » et « Score », avec un espace entre les deux. Le DataTable contient des objets DataRow et chaque ligne représente un enregistrement de la base de données. Lorsque la Listbox se lie au DataTable, elle affiche les valeurs du DisplayMember pour chaque objet DataRow.

Étant donné que chaque DataRow représente la ligne entière de la base de données, la valeur du DisplayMember n'est pas seulement une chaîne mais un DataRowView. objet. Un DataRowView est un wrapper autour d'un objet DataRow, donnant accès à ses valeurs, relations et autres propriétés.

Pour résoudre ce problème et afficher les valeurs réelles « Nom » et « Score » :

  1. Ajoutez une colonne distincte à votre requête SQL pour chacune des valeurs que vous souhaitez afficher dans la Listbox. Par exemple :
<code class="sql">SELECT Name, Score, CONCAT(Name, ' ', Score) as NameAndScore
FROM highscore ORDER BY Score DESC</code>
  1. Modifiez votre code pour définir le DisplayMember de la Listbox sur le nom de colonne approprié, tel que "Name":
<code class="c#">lstNames.DisplayMember = "Name";</code>

En suivant ces étapes, vous pouvez vous assurer que votre Listbox affiche les valeurs souhaitées de votre base de données. N'oubliez pas qu'il est important de comprendre les types de données impliqués lors de la liaison à une Listbox pour éviter de telles divergences.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn