Friday 15 January 2010

c# - How to load child node on expand kendo treeview -



c# - How to load child node on expand kendo treeview -

i want create treeview nodes folders , files on pc. user can drag , drop nodes.

my design view (cshtml) :

@( html.kendo().treeview() .name("treeview") .events(ev=>ev.expand("onexpand")) .bindto((ienumerable<treeviewitemmodel>)viewbag.parentnode) )

my controller :

public class homecontroller : controller { public actionresult treeview() { viewbag.parentnode = getdefaultnode(); homecoming view(); } private ienumerable<treeviewitemmodel> getdefaultnode() { list<treeviewitemmodel> defaultnode = new list<treeviewitemmodel>(); string[] drivers = directory.getlogicaldrives(); (int = 0; < drivers.length; i++) { treeviewitemmodel node = new treeviewitemmodel(); node.text = drivers[i]; node.url = drivers[i]; defaultnode.add(node); getchildnode(node); } homecoming defaultnode; } private void getchildnode(treeviewitemmodel item) { if (directory.exists(item.text)) { seek { string[] dirnodes = directory.getdirectories(item.text); if (dirnodes.length > 0) { (int = 0; < dirnodes.length; i++) { treeviewitemmodel kid = new treeviewitemmodel(); directoryinfo dirinfo = new directoryinfo(dirnodes[i]); child.text = dirinfo.name; child.url = dirinfo.fullname; child.haschildren = true; item.items.add(child); child.items.add(new treeviewitemmodel()); } } string[] filenodes = directory.getfiles(item.text); if (filenodes.length > 0) { (int f = 0; f < filenodes.length; f++) { treeviewitemmodel kid = new treeviewitemmodel(); fileinfo fileinfo = new fileinfo(filenodes[f]); child.text = fileinfo.name; child.url = fileinfo.fullname; child.haschildren = true; item.items.add(child); } } } grab { } } } }

it show root node , kid of root node.

i want kid nodes load on user expand root node. declare events onexpand in treeview, don't know how pass current expand node controller, , list of nodes on view, after insert current expand nodes. had searched lot on page , google, can't find way solve problems.

ps:sorry because i'm not in english, hope can understand mean.

update:

i alter utilize binding remote date still have not solved problems.

my cshtml:

@(html.kendo().treeview() .name("treeview") .datatextfield("text") .dataurlfield("url") .datasource(datasource => datasource .read(read => read .action("getroot", "home") ) ) )

my controller:

public jsonresult getroot() { homecoming json(getdefaultnode(), jsonrequestbehavior.allowget); } private ienumerable<treeviewitemmodel> getdefaultnode() { list<treeviewitemmodel> defaultnode = new list<treeviewitemmodel>(); string[] drivers = directory.getlogicaldrives(); (int = 0; < drivers.length; i++) { treeviewitemmodel node = new treeviewitemmodel(); node.text = drivers[i]; node.url = drivers[i]; defaultnode.add(node); getchildnode(node); } homecoming defaultnode; } private void getchildnode(treeviewitemmodel item) { if (directory.exists(item.text)) { seek { string[] dirnodes = directory.getdirectories(item.text); if (dirnodes.length > 0) { (int = 0; < dirnodes.length; i++) { treeviewitemmodel kid = new treeviewitemmodel(); directoryinfo dirinfo = new directoryinfo(dirnodes[i]); child.text = dirinfo.name; child.url = dirinfo.fullname; item.items.add(child); } } string[] filenodes = directory.getfiles(item.text); if (filenodes.length > 0) { (int f = 0; f < filenodes.length; f++) { treeviewitemmodel kid = new treeviewitemmodel(); fileinfo fileinfo = new fileinfo(filenodes[f]); child.text = fileinfo.name; child.url = fileinfo.fullname; item.items.add(child); } } } grab { } } }

and result:

as see, show root nodes without child nodes.when debug, root nodes contain childs

problems solved. when using remote databinding, nodes load on same level.when onexpand fire, phone call method getnodes again.

public jsonresult getnodes(string id) { list<node> node = new list<node>(); list<string> drivers=new list<string>(); if (string.isnullorempty(id)) { drivers.addrange(directory.getlogicaldrives()); } else { if(directory.exists(id)) drivers.addrange(directory.getdirectories(id)); } seek { (int = 0; < drivers.count; i++) { node item = new node(); directoryinfo dirinfo = new directoryinfo(drivers[i]); item.id = dirinfo.fullname; item.name = dirinfo.name; item.haschildren = hasnodes(drivers[i]); node.add(item); } } grab { } homecoming json(node, jsonrequestbehavior.allowget); }

c# jquery asp.net-mvc kendo-treeview

No comments:

Post a Comment