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" の値を表示するには:
<code class="sql">SELECT Name, Score, CONCAT(Name, ' ', Score) as NameAndScore FROM highscore ORDER BY Score DESC</code>
<code class="c#">lstNames.DisplayMember = "Name";</code>
以下の手順に従うことで、リストボックスにデータベースからの目的の値が表示されるようにすることができます。このような不一致を避けるために、リストボックスにバインドするときに関係するデータ型を理解することが重要であることに注意してください。
以上がWinForms リストボックスに期待値ではなく「System.Data.DataRowView」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。