2014-04-21 3 views
0

SQL 쿼리를 사용하여 데이터를 검색하고 목록 상자에 쓰고 있습니다. 그러나 때로는 항목에 둘 이상의 값이있을 수 있습니다.Lisbox Array를 읽는 가장 좋은 방법

IE :

데이터 : "환자 공개" 값 : "만남"

또는

데이터 : "환자 공개" 값 : 목록 상자에서 "주문"

광고 항목에는 '환자 공개'만 표시되지만 배열에 값이 기록되어 있습니다. 그러나 동일한 광고 항목 중 2 개가 표시되는 것을 원하지 않습니다. "주문"값은 여러 값이있는 경우에만 표시되어야합니다. 어떻게해야합니까?

While reader.Read() 
    Dim Myitem As New List(Of myitems) 
    Myitem.Add(New myitems with {.Description = reader(0), .Value = reader(2)}) 
    '    If reader(2) = "Order" Then 
    '     listBox1.Items.Add(Myitem.ToArray) 
    '    Else 
    '     listBox1.Items.Add(reader(0)) 
    '    End If 

    listBox1.Items.AddRange(Myitem.ToArray) 
End While 
+0

소스가 DB이므로 열을 쉽게 지원하는 DataGridView를 사용하지 않는 이유는 무엇입니까? – Plutonix

+0

사용자가 사용할 수있는 모든 열을 원하지 않습니다. 그들은 "데이터"부분 만보아야합니다. – You

+0

'MyItem'은 어떻게 생겼습니까? 'ToString' 함수를 오버라이드하여 표시하고자하는 것을 반환 한 다음, myItem 객체를 목록 상자에 저장하면됩니다 (아래 참조) (DGV는 숨겨진 열을 가질 수 있습니다 - 많은 경우) – Plutonix

답변

1

당신은 그러나

listBox1.Items.AddRange(Myitem.Distinct().ToArray()) 

과 중복을 제거 할 수 있습니다, 당신이 무엇을 요구 모르겠습니다. 좋은 일은 이미 완료 한 것처럼 데이터 판독기로 직접 작업하는 대신 데이터를 보유하는 클래스를 만드는 것입니다. 보다 구체적인 이름을 myitems으로 지정하십시오. 개발자로서 우리는 많은 종류의 "아이템"을 끊임없이 연구하고 있습니다. 당신이 다음 ListBoxPatient 객체를 추가하는 경우

Public Class Patient // Or whatever the items are supposed to represent. 
    Public Property Description As String 
    Public Property Value As String 

    Public Overrides Function ToString() As String 
     Return String.Format("Description = {0}, Value = {1}", Description, Value) 
    End Function 
End Class 

ListBox 자동으로 항목을 표시하는 ToString을 사용합니다.

두 개체를 비교하는 방식에 영향을주기 위해 EqualsGetHashCode을 재정의 할 수도 있습니다. Distinct 메서드는 작업을 수행하기 위해이 두 메서드를 사용합니다. 참조 : Implementing the Equals Method

관련 문제