>  기사  >  데이터 베이스  >  내 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에 할당합니다. Listbox의 DisplayMember는 "NameAndScore"로 설정되고 DataTable은 Listbox의 데이터 소스 역할을 합니다.

근본 원인은 Listbox에 할당되는 데이터 유형에 있습니다. 데이터를 목록 상자에 바인딩할 때 일반적으로 문자열이나 개체를 DisplayMember로 지정합니다. 그런 다음 목록 상자의 각 항목은 바인딩된 데이터의 DisplayMember 값을 사용하여 생성됩니다.

코드에서 DisplayMember는 SQL 쿼리의 계산된 열인 "NameAndScore"입니다. 이 열은 "이름"과 "점수"라는 두 값을 사이에 공백으로 결합합니다. DataTable에는 DataRow 개체가 포함되어 있으며 각 행은 데이터베이스의 레코드를 나타냅니다. Listbox가 DataTable에 바인딩되면 각 DataRow 개체에 대한 DisplayMember의 값이 표시됩니다.

각 DataRow는 데이터베이스의 전체 행을 나타내므로 DisplayMember의 값은 단순한 문자열이 아니라 DataRowView입니다. 물체. DataRowView는 DataRow 개체 주위의 래퍼로 해당 값, 관계 및 기타 속성에 대한 액세스를 제공합니다.

이 문제를 해결하고 실제 "이름" 및 "점수" 값을 표시하려면 다음을 수행하세요.

  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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.