Es kann sein, dass Sie auf „System.Data.DataRowView“ stoßen, wenn Sie tatsächliche Werte in Ihrer WinForms-Listbox erwarten verwirrend. Hier ist eine ausführliche Untersuchung des Übeltäters:
Ihr Code interagiert mit einer Datenbank, ruft Daten mithilfe eines MySQL-Datenadapters und -Adapters ab und weist die Daten einer DataTable zu. Das DisplayMember der Listbox ist auf „NameAndScore“ gesetzt und die DataTable dient als Datenquelle der Listbox.
Die Hauptursache liegt in der Art der Daten, die der Listbox zugewiesen werden. Wenn Sie Daten an eine Listbox binden, geben Sie normalerweise entweder eine Zeichenfolge oder ein Objekt als DisplayMember an. Jedes Element in der Listbox wird dann mithilfe des DisplayMember-Werts aus den gebundenen Daten erstellt.
In Ihrem Code ist das DisplayMember „NameAndScore“, eine berechnete Spalte in Ihrer SQL-Abfrage. Diese Spalte kombiniert zwei Werte, „Name“ und „Punktzahl“, mit einem Leerzeichen dazwischen. Die DataTable enthält DataRow-Objekte und jede Zeile stellt einen Datensatz aus der Datenbank dar. Wenn die Listbox an die DataTable gebunden ist, zeigt sie die Werte des DisplayMember für jedes DataRow-Objekt an.
Da jede DataRow die gesamte Zeile aus der Datenbank darstellt, ist der Wert des DisplayMember nicht nur eine Zeichenfolge, sondern eine DataRowView Objekt. Ein DataRowView ist ein Wrapper um ein DataRow-Objekt und bietet Zugriff auf seine Werte, Beziehungen und andere Eigenschaften.
So beheben Sie dieses Problem und zeigen die tatsächlichen Werte „Name“ und „Score“ an:
<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>
Indem Sie diese Schritte befolgen, können Sie sicherstellen, dass Ihre Listbox die gewünschten Werte aus Ihrer Datenbank anzeigt. Denken Sie daran, dass es wichtig ist, die beteiligten Datentypen bei der Bindung an eine Listbox zu verstehen, um solche Diskrepanzen zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum zeigt mein WinForms-Listbox „System.Data.DataRowView' anstelle der erwarteten Werte an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!