2015-08-03 2 views
-1

Я создаю небольшую визуальную базовую программу для окон, и я пытаюсь реализовать функцию сортировки для данных. Я легко мог сортировать поле списка имен в алфавитном порядке, но все другие значения, связанные с этим именем (адрес, дата и т. Д.), Я не могу сортировать с ним.Сортировка 2 или более связанных списков в VB.Net

Любая помощь была бы принята с благодарностью.

Вот код, я использую для сортировки списка:

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 
+0

Добро пожаловать в переполнение стека. Не могли бы вы опубликовать код, который у вас есть, связанный с вашим вопросом? Это даст вам максимальный шанс получить качественный ответ. Прямо сейчас мы как бы угадываем, что такое «ответ», и мы вряд ли получим «ответ», который вам нужен. – Enigmativity

+0

И другие значения - это также в списках? И как вы хотите, чтобы они сортировались? – Enigmativity

+0

Это сортирует окно списка, называемое lstname. У меня есть 3 других списка с различными вещами, относящимися к этому имени (адресный номер телефона и т. Д.). Когда я сортирую список lstname в алфавитном порядке с помощью этого кода, мне нужны все остальные значения, относящиеся к этому имени, в других списках для сортировки, соответствующих порядку элементов в списке имен. Независимо от того, что я пытаюсь, ничего не работает. –

ответ

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 

Предполагается, что в каждом списке есть одинаковое количество элементов, но это похоже на то, что происходит.

+0

это прекрасно работает, но я не уверен, как его модифицировать для других целей. Что бы я изменил, если бы хотел сортировать по номеру, а не по алфавиту? –

+0

Я посмотрел на используемые функции, и я предполагаю, что мне нужно изменить ключ, который я сортирую по (x) в этом случае, но я не уверен, как это сделать. –

+0

@HamishMcDonald - Ответ, который я написал, показывает, как сортировать по 'String' и' DateTime' - см. Вызовы 'CStr (...)' и 'CDate (...)'? Вы могли бы использовать 'CInt (...)' вместо этого, если бы это было числовое поле. Вызов '.OrderBy (...)' работает с любым типом. – Enigmativity

Смежные вопросы