Инфраструктурный 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" запускается в середине выбора и блокирует пользовательский интерфейс, что может привести к не очень отзывчивому приложению, если вы добавите более сложную логику.