Заполнение динамически добавленного списка из динамически добавленного выбора combobox

Я просто улучшил динамическую сортировку Ege Özcan для погружения глубоко внутри объектов. Если Data выглядит так:

obj = [
    {
        a: { a: 1, b: 2, c: 3 },
        b: { a: 4, b: 5, c: 6 }
    },
    { 
        a: { a: 3, b: 2, c: 1 },
        b: { a: 6, b: 5, c: 4 }
}];

, и если вы хотите отсортировать его по свойствам a.a, я думаю, что мое улучшение помогает очень хорошо. Я добавляю новую функциональность к таким объектам:

Object.defineProperty(Object.prototype, 'deepVal', {
    enumerable: false,
    writable: true,
    value: function (propertyChain) {
        var levels = propertyChain.split('.');
        parent = this;
        for (var i = 0; i < levels.length; i++) {
            if (!parent[levels[i]])
                return undefined;
            parent = parent[levels[i]];
        }
        return parent;
    }
});

и изменил функцию return_dynamicSort :

return function (a,b) {
        var result = ((a.deepVal(property) > b.deepVal(property)) - (a.deepVal(property) < b.deepVal(property)));
        return result * sortOrder;
    }

И теперь вы можете сортировать по a.a. следующим образом:

obj.sortBy('a.a');

См. Commplete script in JSFiddle

1
задан nbatts 13 July 2018 в 20:45
поделиться

1 ответ

OK, мой отец помог мне прийти к этому решению. Это немного статично, но отлично работает для того, что мне нужно.

Пришлось редактировать данные поставщика на несколько листов и использовать инструмент «Определить имя» в разделе «Данные», чтобы назвать диапазон. Переменная списка изменяется в соответствии с выбором combobox.

Dim listBoxName As String
listBoxName = "myList" & ComboBox.Tag

Dim rangeName As String
rangeName = "company_1"

Select Case ComboBox.value
    Case "Company 1"
        rangeName = "company_1"
    Case "Company 2"
        rangeName = "company_2"
End Select

Dim listBox As Control
Set listBox = Me.Controls(listBoxName)
listBox.RowSource = rangeName

Вышеприведенный код был добавлен к закрытому элементу, указанному в исходном потоке.

0
ответ дан nbatts 17 August 2018 в 12:09
поделиться