Инфраструктурный Jquery Grid первичный ключ

Я пытаюсь сделать выбор строки в моей сетке, но пытаюсь либо установить, либо получить значения datakey, так как не могу найти там никакой документации.

$("#divGrid").igGrid({
            columns: [
                { headerText: "@Manage.gridColumnEmployeeNumber", key: "EmployeeNumber" },
            ],
            dataKeyFields: "EmployeeNumber",  //Is this how you set the dataKeys?
            autoGenerateColumns: false,
            dataSource: jsonp,
            features: [
                {
                    name: "Selection",
                    rowSelectionChanging: rowSelectionChanging
                }
            ]
        });
    });

Это не работает вообще. Как мне получить доступ к своему dataKey (primaryKey) в этом разделе кода?

    function rowSelectionChanging(evt, ui) {
        if (confirm) {
            var rows = ui.getSelectedRows();
            var selectedRow = rows.getItem(0);
            var selectedDataKey = selectedRow.get_dataKey();

            alert(selectedDataKey);
        } else {
            return false;
        }
    }

2 ответа

Решение

[...] dataKeyFields: "EmployeeNumber", // Это как вы устанавливаете dataKeys? [...]

Достаточно близко. На самом деле это "primaryKey" примерно так:

[...]
primaryKey: "EmployeeNumber",
[...]

И для второй части, я думаю, это не очевидно сразу, однако строка, которую вы передаете в качестве аргумента, является фактическим выбранным элементом DOM TR, и вы можете (как подсказывает ваша текущая настройка) просто выбрать ключ из его ячеек, например: так:

var rowKey = $(ui.row.element).children().eq(0).text(); //may need to parse if int

Примечание. Метод eq() принимает индекс с нуля, а с точки зрения структуры дочерними элементами строки являются ячейки. В вашем случае столбец первичного ключа является первым (и единственным) и поэтому имеет индекс 0.

Другой подход, который я считаю более дружественным к программам, - это получить ключ прямо из источника данных (более понятным для чтения и не нуждающимся в синтаксическом анализе):

var rowKey = ui.owner.grid.dataSource.dataView()[ui.row.index].EmployeeNumber;

Примечание: "владелец" - это фактический виджет, отвечающий за событие (выбор), и он имеет ссылку на вашу "сетку", и оттуда вы можете получить доступ к источнику данных. Чтобы получить записи, используйте ".data()" или ".dataView()" - последняя содержит только фактические видимые строки, на которых основан индекс, и должна использоваться, если включены какие-либо дополнительные функции (разбиение по страницам, сортировка, фильтрация)...).

Вот страница документации, которая (внизу) описывает, что предоставляют события выбора - http://help.infragistics.com/NetAdvantage/jQuery/2012.1/CLR4.0?page=igGrid_Selection_Overview.html

А вот полная ссылка на API: http://help.infragistics.com/jQuery/2012.1/ui.iggridselection - отсюда вы можете перейти к любому API-интерфейсу сетки / грид-функции / источника данных, а у событий есть примеры фрагментов со всеми полезными параметры перечислены.

PS Если цель не состоит в том, чтобы контролировать выбор пользователей, рассмотрите возможность использования события '-ed', как в 'rowSelectionChanged' - доступные параметры идентичны. Разница в том, что "-ing" запускается в середине выбора и блокирует пользовательский интерфейс, что может привести к не очень отзывчивому приложению, если вы добавите более сложную логику.

try var rowKey = ui.owner.grid.options.primaryKeyValue;

Другие вопросы по тегам