绑定Telerik RadTreeView客户端

我有一个javascript对象数组,我想用它来填充RadTreeView。 除了为我的对象集合手动编写自己的绑定方法之外,我无法弄清楚如何从客户端实现此目的。

我的javascript数组中的每个对象都有

Id ParentId值文本

有没有办法从客户端的这个javascript数据结构自动填充整个树? 我是否必须逐一进行此操作? 通过遍历我的数组并递归下去树?

我正在使用Web服务来获取具有此数据的JSON对象,我想完全构建树,而不仅仅是在扩展节点上。

显然,没有办法从客户端绑定整个树。 您可以做的最多是绑定第一级节点,当用户点击每个节点时,您可以填充子节点进行另一个Web方法调用。

      

您的GetRootNodes方法可能如下所示:

 [WebMethod, ScriptMethod] public RadTreeNodeData[] GetRootNodes(RadTreeNodeData node, object context) { DataTable productCategories = GetProductCategories(node.Value); List result = new List(); foreach (DataRow row in productCategories.Rows) { RadTreeNodeData itemData = new RadTreeNodeData(); itemData.Text = row["Title"].ToString(); itemData.Value = row["CategoryId"].ToString(); if (Convert.ToInt32(row["ChildrenCount"]) > 0) { itemData.ExpandMode = TreeNodeExpandMode.WebService; } result.Add(itemData); } return result.ToArray(); } 

PopulateChild客户端方法可以是这样的:

 function PopulateChild(sender, args) { var treeView = $find('datesTree'); var nodeText = ""; $.ajax({ type: "POST", url: "../AcmeWebService.asmx/GetChildNodes", contentType: "application/json; charset=utf-8", dataType: "json", data: "{'nodeText': '" + nodeText + "','nodeValue': '" + args.get_node().get_value() + "','param2':'" + treeView.get_allNodes()[0].get_value() + "' }", success: function(msg) { if (treeView != null) { treeView.trackChanges(); var parent = treeView.get_selectedNode() || treeView; var count = parent.get_nodes().get_count(); for (var i = 0; i < msg.d.length; i++) { var node = new Telerik.Web.UI.RadTreeNode(); node.set_text(msg.d[i].Text); node.set_value(msg.d[i].ParentID); node.set_expanded(true); parent.get_nodes().add(node); } treeView.commitChanges(); } } }); 

}

并且在Web服务方法上填充子节点可以是这样的:

 [WebMethod, ScriptMethod] public IEnumerable GetChildNodes(string nodeText, string nodeValue, int param2) { //call your DAL with any parameter you passed in from above IEnumerable nodes = ... return nodes; } 

注意0上述方法不返回RadTreeNodeData数组。 它可以是您自己的自定义对象的任何集合。 同样适用于GetRootNodes只是我从Telerik的网站上复制了那个;)

注1:我有一个类似的场景,我使用这种技术最初加载第一级节点,并在客户端点击加载其他节点。 我在这里发布的一些代码是我原始代码的精简版。

我希望它有所帮助。

根据文档,客户端Nodes属性是只读的:

RadTreeView客户端对象