2014-12-04 2 views
0

У меня есть следующая таблица:VB: заселение выпадающего со значениями из таблицы

Public table As New DataTable 

    table.Columns.Add("#", GetType(Integer)) 
    table.Columns.Add("Name", GetType(String)) 
    table.Columns.Add("Exp", GetType(Integer)) 
    table.Columns.Add("HP", GetType(Integer)) 
    table.Columns.Add("At", GetType(Integer)) 
    table.Columns.Add("De", GetType(Integer)) 
    table.Columns.Add("SA", GetType(Integer)) 
    table.Columns.Add("SD", GetType(Integer)) 
    table.Columns.Add("Sp", GetType(Integer)) 
    table.Columns.Add("Tot", GetType(Integer)) 

    table.Rows.Add(1, "One", 64, 0, 0, 0, 1, 0, 0, 1) 
    table.Rows.Add(2, "Two", 142, 0, 0, 0, 1, 1, 0, 2) 
    table.Rows.Add(3, "Three", 236, 0, 0, 0, 2, 1, 0, 3) 

.......... 

В таблице есть сотни записей.

Я хотел бы заполнить поле со всеми полями поля Name, отсортированным в алфавитном порядке или по # (как определено пользователем).

Есть ли способ легко сделать это, например. что-то по линии

combobox.Items.AddRange(table.Colums(2)) 

?

ответ

1

Вы можете получить необходимые данные с помощью LINQ:

Dim values = table.AsEnumerable(). 
    OrderBy(Function(row) row.Field(Of Integer)("#")). 
    Select(Function(row) row.Field(Of String)("Name")). 
    ToArray() 

А потом добавить их к вам COMBOBOX:

combobox.Items.AddRange(values) 
+0

Спасибо, это сработало! Однако, в AddRange(), 'values', вместо' val' необходимо было использовать – Mierzen

+0

@Mierzen Sure. Я исправил эту часть ответа. –

1

В приведенном ниже примере, я полагаю, выпадающий с именем ComboBox1, расположенный на Sheet1. Я также предполагаю, что таблица называется Table1. Вам необходимо будет отрегулировать по мере необходимости.

Это решение VBA.

Sub SortedComboFromTableColumn() 
    Dim rng As Range 

    With CreateObject("System.Collections.ArrayList") 
     For Each rng In Range("Table1[Name]") 
      .Add rng.Value 
     Next 
     .Sort 

     Sheets(1).ComboBox1.List = Application.Transpose(.toarray()) 
    End With 
End Sub