2014-04-21 65 views
0

我正在使用sql查詢來檢索數據並寫入列表框。但是,有時一個項目可能有多個值。讀取Lisbox陣列的最佳方法

IE:

數據: 「患者披露」 值: 「遭遇」

數據: 「患者披露」 值: 「訂單」

在列表框,該訂單項只會顯示「患者披露」,但我已將值寫入數組中。不過,我不希望兩個相同的訂單項出現。 「訂單」值應該是唯一一個顯示它是否具有多個值的值。我怎樣才能做到這一點?

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

因爲源是一個數據庫爲什麼不使用DataGridView輕鬆支持列? – Plutonix

+0

我不希望所有列都可用於用戶。他們只應該看到「數據」部分。 – You

+0

'MyItem'看起來像什麼?你可能會重寫'ToString'函數來返回你想要顯示的內容,然後將myItem對象存儲到列表框中(見下面)(DGV可以有隱藏列 - 很多都可以) – Plutonix

回答

1

可以消除重複與

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

但是,我不知道你在問什麼。我很好的做法是創建一個保存數據的類,而不是直接與數據讀取器一起工作,就像您已經完成的那樣。給它一個比myitems更具描述性的名稱。作爲開發人員,我們一直在處理各種「項目」。

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 

如果再加入Patient對象到ListBox,該ListBox會自動使用ToString顯示的項目。

您也可以覆蓋EqualsGetHashCode以影響兩個對象的比較方式。 Distinct方法將使用這兩種方法來完成其工作。請參閱:Implementing the Equals Method

相關問題