对列表框进行排序,但将项目组合在一起

时间:2012-08-11 14:16:50

标签: vb.net

我有一个问题,我需要在列表框中整理项目,我知道该怎么做,但问题是,我的列表框是这样排序的

人1名字
人1姓 人1日期
人1性别
人1地址
人2名字
人2姓 人2日期
人2性别
人2地址
每个值都在一个新行上。 我想要的是将每个人的5个细节放在一起并按日期排序,但我不知道该怎么做,因为我知道排序细节的唯一代码会混淆所有数据。

Private Sub btnSortDate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSortDate.Click
    Dim arr As New ArrayList
    Dim iLp As Integer

    arr.AddRange(lstFDisplay.Items)

    arr.Sort()

    lstFDisplay.Items.Clear()

    For iLp = 0 To arr.Count - 1
        lstFDisplay.Items.Add(arr(iLp))
    Next iLp
End Sub

1 个答案:

答案 0 :(得分:0)

EDIT2:您需要将您的逻辑(您的人员,日期)与您的演示文稿分开(您通过放入列表框向用户显示的内容)。您应该总是避免的东西是显示某些内容(例如,显示人员列表),然后将其读回并尝试理解它。

    Module MyForm
        ' Keep our dates & people in this dictionary
        ' Because it's a SortedDictionary, it'll keep them sorted by key
        '                                                key,     value
        Public personDictionary As New SortedDictionary(Of DateTime, Person)

        Public Sub New()
            InitializeComponent()
            ' Call CreatePeople() to fill our dictionary when the form is made
            CreatePeople()
            ' Then call FillListBox() to fill our listbox from that dictionary
            FillListBox()
        End Sub

        Private Sub CreatePeople()
            ' Make your persons and dates here
            Dim a = New Person(...)
            Dim dateA = New DateTime(2012,2,3)

            ' Keep them in our internal dictionary
            ' .Add(..) takes our key (a DateTime) and a value (a Person)
            personDictionary.Add(dateA, a)
        End Sub

        Private Sub FillListBox()
            lstFDisplay.Clear()

            ' Here we do something 'For Each' item in the dictionary
            ' The dictionary is filled with 'pairs' of key|value (DateTime|Person)
            For Each pair In personDictionary
                DateTime date = pair.Key
                Person person = pair.Value
                'Use this data to add items to our UI
                lstFDisplay.Items.Add("Name: "&person.Name
                lstFDisplay.Items.Add("Address: "&person.Address
                lstFDisplay.Items.Add(person.Name&" registered on "&date)
            Next
        End Sub

当您想要添加或删除人员时,只需在字典中添加.Add(..).Remove(..),然后再次致电FillListBox()以刷新您的用户界面。通过将值保留在代码本身中,而不是每次都从列表框中重新读取它,您可以更好地控制处理该信息的方式。