Узлы дерева jqGrid читаются с сервера с использованием данных json. Щелчок в узле читает дочерние узлы с сервера.
Код ниже используется для восстановления открытого узла дерева, если страница загружена.
Только один узел всегда открыт в дереве.
Контроллер присваивает идентификаторы узлов массиву autoClicked, а gridComplete открывает узлы, используя этот путь.
Это вызывает смещение сетки при загрузке страницы, так как несколько запросов к серверу строят сетку несколько раз.
Как отключить мигание сетки?
Можно ли предотвратить множественное построение jqGrid и показывать только дерево jqGrid?
Ответить в
Отправка расширенных узлов TreeGrid в cookie
работает только для полностью заполненной сетки.
var autoClicked=[<%= Model.Path() %>];
$(function () {
var grid = $("#tree-grid");
grid.jqGrid({
gridComplete: function () {
setTimeout(function () {
var id = autoClicked.shift();
var rData = grid.getGridParam('data');
var data = null;
for (var i = 0; i < rData.length; i++) {
if (id == rData[i].id) {
data = rData[i];
break;
}
}
if (data == null)
return;
grid.expandRow(data);
grid.expandNode(data);
}, 0);
},
url: '<%= ResolveUrl("~/Store/GridData")%>',
datatype: "json",
mtype: "POST",
height: "auto",
loadui: "disable",
treeGridModel: "adjacency",
colModel: [
{ name: "id", width: 1, hidden: true, key: true },
{ name: "menu", classes: "handcursor" },
{ name: "url", width: 1, hidden: true }
],
autowidth: true,
treeGrid: true,
ExpandColumn: "menu",
rowNum: 200,
ExpandColClick: true,
onSelectRow: function (rowid) {
var treedata = grid.jqGrid('getRowData', rowid);
window.location = treedata.url;
}
}
);
});
Контроллер:
public string Path()
{
Artomlii node = Artomliik;
string res = node.Artomaliik.ToString();
while (!Core.IsNullOrWhiteSpace(node.Treeparent))
{
// retrieve parent node
node = MyDataContext.ExecQuery<Artomlii>(@"select * from artomlii where treeorder={0}", node.Treeparent).FirstOrDefault();
if (node == null)
break;
res = node.Artomaliik.ToString() + "," + res;
}
return res;
}