Mat*_*att 3 javascript c# asp.net telerik radtreeview
我有一个javascript对象数组,我想用它来填充RadTreeView.除了为我的对象集合手动编写自己的绑定方法之外,我无法弄清楚如何从客户端完成此操作.
我的javascript数组中的每个对象都有
Id ParentId值文本
有没有办法从客户端的这个javascript数据结构自动填充整个树?我必须1比1做这个吗?通过遍历我的数组并递归下去树?
我正在使用Web服务来获取具有此数据的JSON对象,并且我想完全构建树,而不仅仅是在扩展节点上.
显然,没有办法从客户端绑定整个树.您可以做的最多是绑定第一级节点,当用户点击每个节点时,您可以填充子节点进行另一个Web方法调用.
<telerik:RadTreeView OnClientNodeClicking="PopulateChild" DataTextField="Text"
ID="datesTree" runat="server">
<WebServiceSettings Path="../AcmeWebService.asmx" Method="GetRootNodes" />
<Nodes>
<telerik:RadTreeNode Text="Root Node" ImageUrl="../images/truckicon.png" ExpandMode="WebService" />
</Nodes>
</telerik:RadTreeView>
Run Code Online (Sandbox Code Playgroud)
您的GetRootNodes方法可能如下所示:
[WebMethod, ScriptMethod]
public RadTreeNodeData[] GetRootNodes(RadTreeNodeData node, object context)
{
DataTable productCategories = GetProductCategories(node.Value);
List<RadTreeNodeData> result = new List<RadTreeNodeData>();
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();
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
}
在Web服务方法上填充子节点可以是这样的:
[WebMethod, ScriptMethod]
public IEnumerable<YourNode> GetChildNodes(string nodeText, string nodeValue, int param2)
{
//call your DAL with any parameter you passed in from above
IEnumerable<YourNode> nodes = ...
return nodes;
}
Run Code Online (Sandbox Code Playgroud)
注意0上述方法不返回RadTreeNodeData数组.它可以是您自己的自定义对象的任何集合.同样GetRootNodes的,我只是从Telerik的网站上复制了那个;)
注1:我有一个类似的场景,我使用这种技术最初加载第一级节点,并在客户端点击加载其他节点.我在这里发布的一些代码是我原始代码的精简版.
我希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
10960 次 |
| 最近记录: |