加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 绑定Telerik RadTreeView客户端

发布时间:2020-12-16 01:48:15 所属栏目:百科 来源:网络整理
导读:我有一个 javascript对象数组,我想用它来填充RadTreeView. 除了为我的对象集合手动编写自己的绑定方法之外,我无法弄清楚如何从客户端完成此操作. 我的javascript数组中的每个对象都有 ID 的ParentId 值 文本 有没有办法从客户端的这个javascript数据结构自动
我有一个 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>

您的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();
}

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<YourNode> GetChildNodes(string nodeText,string nodeValue,int param2)
{
   //call your DAL with any parameter you passed in from above
   IEnumerable<YourNode> nodes = ...
   return nodes;
}

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

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

我希望它有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读