在VB.Net中对2个或更多相关列表框进行排序

时间:2015-08-03 00:17:14

标签: vb.net sorting

我正在创建一个小的visual basic windows窗体程序,我正在尝试为数据实现一个sort函数。我可以很容易地按字母顺序对名称列表框进行排序,但是与该名称相关的所有其他值(地址,日期等)我都无法对其进行排序。

非常感谢任何帮助。

以下是我用来对列表框进行排序的代码:

    Private Sub btnsort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsort.Click
    Dim Templist As New List(Of String)
    For Each LI In lstName.Items
        Templist.Add(String.Concat(LI.ToString))
    Next
    Templist.Sort()
    lstName.DataSource = Templist
End Sub

这是新代码:

    Private Sub btnsort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsort.Click
    Dim items = _
Enumerable _
    .Range(0, lstapartment.Items.Count) _
    .Select(Function(n) New With _
    { _
        .apartment = CInt(lstapartment.Items(n)), _
        .name = CStr(lstname.Items(n)), _
        .date = CStr(lsttime.Items(n)), _
        .contact = CInt(lstcontact.Items(n)) _
    }) _
    .OrderBy(Function(x) x.apartment) _
    .ToArray()

    lstname.DataSource = items.Select(Function(x) x.apartment).ToArray()
    lstcontact.DataSource = items.Select(Function(x) x.name).ToArray()
    lstapartment.DataSource = items.Select(Function(x) x.contact).ToArray()
    lsttime.DataSource = items.Select(Function(x) x.Date).ToArray()
End Sub

1 个答案:

答案 0 :(得分:0)

试试这个:

Private Sub btnsort_Click(sender As Object, e As EventArgs) Handles btnsort.Click

    Dim items = _
        Enumerable _
            .Range(0, lstName.Items.Count) _
            .Select(Function(n) New With _
            { _
                .Name = CStr(lstName.Items(n)), _
                .Address = CStr(lstAddress.Items(n)), _
                .Phone = CStr(lstPhone.Items(n)), _
                .Date = CDate(lstDate.Items(n)) _
            }) _
            .OrderBy(Function(x) x.Name) _
            .ToArray()

    lstName.DataSource = items.Select(Function(x) x.Name).ToArray()
    lstAddress.DataSource = items.Select(Function(x) x.Address).ToArray()
    lstPhone.DataSource = items.Select(Function(x) x.Phone).ToArray()
    lstDate.DataSource = items.Select(Function(x) x.Date).ToArray()

End Sub

这假设每个列表框中的项目数相同,但听起来就像正在发生的事情。