ホームページ  >  記事  >  データベース  >  WinForms リストボックスに期待値ではなく「System.Data.DataRowView」が表示されるのはなぜですか?

WinForms リストボックスに期待値ではなく「System.Data.DataRowView」が表示されるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 14:55:30690ブラウズ

Why Does My WinForms Listbox Show

WinForms リストボックスの "System.Data.DataRowView" の謎を解明する

WinForms リストボックスで実際の値を期待しているときに "System.Data.DataRowView" に遭遇するのは、困惑する。以下に原因の詳細な調査を示します。

コードはデータベースと対話し、MySQL データ アダプターとアダプターを使用してデータを取得し、そのデータを DataTable に割り当てます。リストボックスの DisplayMember は「NameAndScore」に設定され、DataTable はリストボックスのデータ ソースとして機能します。

根本的な原因は、リストボックスに割り当てられているデータのタイプにあります。データをリストボックスにバインドするときは、通常、その DisplayMember として文字列またはオブジェクトのいずれかを指定します。次に、リストボックス内の各項目は、バインドされたデータからの DisplayMember の値を使用して作成されます。

コードでは、DisplayMember は "NameAndScore" であり、SQL クエリの計算列です。この列は、「名前」と「スコア」の 2 つの値を、間にスペースを入れて組み合わせます。 DataTable には DataRow オブジェクトが含まれており、各行はデータベースのレコードを表します。 Listbox が DataTable にバインドされると、各 DataRow オブジェクトの DisplayMember の値が表示されます。

各 DataRow はデータベースの行全体を表すため、DisplayMember の値は単なる文字列ではなく DataRowView です。物体。 DataRowView は DataRow オブジェクトのラッパーであり、その値、関係、その他のプロパティへのアクセスを提供します。

この問題を解決し、実際の "Name" と "Score" の値を表示するには:

  1. リストボックスに表示する値ごとに、SQL クエリに個別の列を追加します。例:
<code class="sql">SELECT Name, Score, CONCAT(Name, ' ', Score) as NameAndScore
FROM highscore ORDER BY Score DESC</code>
  1. コードを変更して、Listbox の DisplayMember を「Name」などの適切な列名に設定します。
<code class="c#">lstNames.DisplayMember = "Name";</code>

以下の手順に従うことで、リストボックスにデータベースからの目的の値が表示されるようにすることができます。このような不一致を避けるために、リストボックスにバインドするときに関係するデータ型を理解することが重要であることに注意してください。

以上がWinForms リストボックスに期待値ではなく「System.Data.DataRowView」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。