我们创建了一个表示文件系统的jqGrid TreeGrid,其中分支是文件夹,叶子是文件。我们已经在TreeGrid中实现了功能,通过使用addChildNode
来创建新的“文件”,这很好地工作。但是,我们还希望添加功能来创建新文件夹。我们的脚本可以创建新的文件夹,但它们不会立即显示在TreeGrid上,除非它或页面被重新加载。但是,重新加载TreeGrid会折叠所有文件夹,这特别烦人。向jqGrid Treegrid模型添加新行
有没有办法选择性地刷新TreeGrid的节点,或者添加一个新的分支,这是功能?我在addJSONData
上看到了部分文档,但是使用这个函数完全清除了TreeGrid,直到刷新。我也尝试使用addChildNode
并更改某些属性,并试图使用DOM操作手动添加行;但是,这两种方法都会破坏插入的节点。
编辑:
var grid = $("#grid");
grid.jqGrid({
treeGrid: true,
treeGridModel: "adjacency",
ExpandColumn: 'name',
ExpandColClick: true,
url:"",
datatype:"json",
colNames:['id','Name','Authorization','Views','Uri'],
colModel:[ {name:'id', index:'id', hidden:true, key:true},
{name:'name', index:'name', sorttype:"text", width:3, sortable:false},
{name:'auth',index:'auth', sorttype:"text", sortable:false, hidden:true},
{name:'views',index:'views', sorttype:"integer", width:1, sortable:false, align:"center"},
{name:'uri',index:'uri',sorttype:'text',sortable:false,hidden:true}],
jsonReader:{ root:"rows"
,page:"page"
,total:"total"
,records:"records"
,repeatitems:false
,cell:""
,id:"0"
,userdata:""
},
multiselect:false,
autowidth:true,
height:"auto",
sortable:false,
toppager:true,
hidegrid: false,
loadui: 'block',
pager:"#grid_pager",
caption: "Files",
});
返回的JSON请求新文件夹看起来是这样的:
ret = {"error":"","total":1,"page":1,"records":1,"rows":[{"id":"1113","name":"test","uri":"accounting\/test\/","parent":1,"isLeaf":false,"expanded":true,"loaded":true}]}
对此我尝试使用添加:
grid[0].addJSONData(ret);
初始加载的数据以JSON形式发送:
{"rows":[
{"id":"1","uri":"afolder\/","parent_id":"0","name":"afolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"4","uri":"bfolder\/","parent_id":"0","name":"bfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"7","uri":"cfolder\/","parent_id":"0","name":"cfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"20","uri":"dfolder\/","parent_id":"0","name":"dfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"48","uri":"efolder\/","parent_id":"0","name":"efolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"179","uri":"ffolder\/","parent_id":"0","name":"ffolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"182","uri":"gfolder\/","parent_id":"0","name":"gfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"186","uri":"hfolder\/","parent_id":"0","name":"hfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"201","uri":"ifolder\/","parent_id":"0","name":"ifolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"239","uri":"jfolder\/","parent_id":"0","name":"jfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"253","uri":"kfolder\/","parent_id":"0","name":"kfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"262","uri":"lfolder\/","parent_id":"0","name":"lfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"274","uri":"mfolder\/","parent_id":"0","name":"mfolder","level":0,"parent":"0","isLeaf":"false"}
]}
添加代码总是非常有帮助,因为它可以获得许多额外的重要信息。你能否介绍一下你使用的TreeGrid?你使用本地数据还是从服务器加载数据?您是否一次加载整个网格,或者在展开其父节点时加载子节点?您拥有哪种网格模型:嵌套集模型或邻接模型。如何获取有关应添加到treegrid中的新文件夹的信息?将填充来自某些页面输入控件的信息,还是将从服务器加载? – Oleg
我们使用邻接模型,并在扩展节点时将数据作为JSON请求从MySQL数据库中获取。有关新文件夹的信息将通过AJAX请求在数据库中创建新文件夹记录的JSON请求中返回。增加了代码。 – shmeeps
对不起,但我还是不了解情况。首先用服务器的数据填充树网格。如果用户点击树节点,节点的子节点将从服务器加载。它是如何来增加一个节点(文件夹)?为什么新文件夹的数据包含父项('“parent”:1')?理解你如何填补网格与你的主要问题有关。你写过关于“获取数据的部分”,但是来自数据库。我无法想象这种情况。如果您从数据库中进行SELECT操作,则可以将所有结果发送到网格。是这样吗? – Oleg