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 개체 주위의 래퍼로 해당 값, 관계 및 기타 속성에 대한 액세스를 제공합니다.
이 문제를 해결하고 실제 "이름" 및 "점수" 값을 표시하려면 다음을 수행하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!