一、前台显示

  备注:一次性取出所有节点

function loadTreeData() {
$.ajax({
type: 'POST',
url: '@(Html.UrlHref("ScriptSite", "/FilesManager/MyFiles/GetFolderTree"))',
data: {},
success: function (result) {
if (result) {
inlineDefault = new kendo.data.HierarchicalDataSource({
data: eval(result),
schema: {
model: {
children: "Items"
}
}
});
$("#treeviewFolder").kendoTreeView({
dataSource: inlineDefault,
change: onTreeViewChange,
dataTextField: ["Text"]
});
}
else { }
},
error: function (err) {
window.alert(err);
}
});
}

二、后台实现

1、获取树的主方法

        public string GetFolderTree()
{
List<Cust_TreeViewItemModel> lstNodes = new FileManageLogic().GetMyFolderTree(CurrentUser.Id);
string strResult = Newtonsoft.Json.JsonConvert.SerializeObject(lstNodes);
return strResult;
}

根据条件获得树型控件里的所有需要的数据

        public List<Cust_TreeViewItemModel> GetMyFolderTree(Guid userId)
{
List<Cust_TreeViewItemModel> lstResult = new List<Cust_TreeViewItemModel>();
dvaContext context = new dvaContext();
List<es_data_path_mini> lstPaths = context.Database.SqlQuery<es_data_path_mini>("select ID,PID,SEQ,D_PATH from es_data_path where createuserid='" + userId.ToString() + "'").ToList();
GetKendoTree(lstPaths, lstResult, context, userId);
return lstResult;
}

递归实现父子级绑定的关系

private void AddChildKendoTree(List<Cust_TreeViewItemModel> lstTree, es_data_path_mini currentPath, List<es_data_path_mini> lstPaths, bool isFirstLevel)
{
Cust_TreeViewItemModel currentTreeNode = new Cust_TreeViewItemModel();
currentTreeNode.Text = currentPath.D_PATH;
currentTreeNode.Id = currentPath.ID.ToString();
currentTreeNode.Items = null;
currentTreeNode.ParentId = currentPath.PID.ToString();
if (isFirstLevel)
{
currentTreeNode.Expanded = true;
}
else
{
currentTreeNode.Expanded = false;
}
currentTreeNode.Remarks = "";
currentTreeNode.spriteCssClass = "folder";
if (currentTreeNode.Items == null)
{
currentTreeNode.Items = new List<Cust_TreeViewItemModel>();
}
List<es_data_path_mini> lstChildPath = lstPaths.Where(c => c.PID == currentPath.ID).ToList();
if (lstChildPath != null && lstChildPath.Any())
{
currentTreeNode.HasChildren = true;
foreach (var path in lstChildPath)
{
AddChildKendoTree(currentTreeNode.Items, path, lstPaths, false);
}
}
else
{
currentTreeNode.HasChildren = false;
}
if (currentTreeNode.Items.Count == )
{
currentTreeNode.Items = null;
}
lstTree.Add(currentTreeNode);
}

三、技巧

1、根据数据里的id获得当前记录(主键一定要用全小写的id,全部小写,我为什么这么强调?!因为我在这个问题上怀疑人生了一个多小时)

var barDataItem = treeview.dataSource.get(currentSelectedId);

2、根据当前记录的uid获得当前记录的node,下面的barElement 已经是一个node类型的值。

var barElement = treeview.findByUid(barDataItem.uid);

3、根据一个node获得它绑定的数据的id值:

('#treeviewFolder').data('kendoTreeView').dataItem(node).id

4、根据一个node获取它绑定的数据的Text值:

$('#treeviewFolder').data('kendoTreeView').dataItem(node).Text

5、根据一个node获取它的父级node

treeview, treeview.parent(node)

6、自动选中treeView上的某一个节点

var treeView = $('#treeviewFolder').data('kendoTreeView');
var data = treeView.dataSource.get(id);
var selectitem = treeView.findByUid(data.uid);
treeView.select(selectitem);

7、选中第一个节点

var el = $('#' + treeId);
var tree = el.data('kendoTreeView');
var firstNode = el.find('.k-first');
tree.select(firstNode);

asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录的更多相关文章

  1. UI控件Telerik UI for Silverlight发布R2 2019|附下载

    Telerik UI for Silverlight包含了超过100个能用于纯Silverlight应用程序中或能作为现有ASP.NET应用程序的一部分的UI控件.通过与我们的WPF控件共享一个相同的 ...

  2. UI控件Telerik UI for WinForms发布R1 2019|附下载

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...

  3. 移动UI控件Telerik UI for Xamarin发布R2 2019|引入Map控件

    Telerik UI for Xamarin是一个构建跨平台移动应用程序的原生UI.Telerik UI for Xamarin使用Xamarin.Forms技术,它可以让开发人员从一个单一的共享C# ...

  4. UI控件Telerik UI for WPF发布R2 2019|附下载

    Telerik UI for WPF拥有超过100个控件来创建美观.高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序.UI for WPF支持MVVM.触摸等,创建的应用程序可靠且结构良 ...

  5. UI控件Telerik UI for ASP.NET MVC全新发布R2 2019 SP1

    Telerik UI for ASP.NET MVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验.它主要是针 ...

  6. ASP.NET中Button控件的CommandName和CommandArgument属性用法

    在Repeater中的使用: <asp:Repeater ID="rptActionList" runat="server" OnItemCommand= ...

  7. AndroidUI开源组件库BottomView 第三方自定义UI控件

    这里分享一个Android的非常经典实用而且简单方便的第三方UI控件库:BottomView(小米的米UI也用到了这个) 原文  http://blog.csdn.net/opzoonzhuzheng ...

  8. C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)

    概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种:1. ...

  9. C# Winform 跨线程更新UI控件常用方法总结(转)

    出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件 ...

随机推荐

  1. log4j 日志脱敏处理 + java properties文件加载

    Java 加载Properties 配置文件: ResourceBundle bundle = ResourceBundle.getBundle("log4j_filter"); ...

  2. Html在线编辑器--基于Jquery的xhEditor轻量级编辑器

    xhEditor V1.2.2 下载地址 开源中国社区: http://www.oschina.net/p/xheditor xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHT ...

  3. Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role

    <Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...

  4. JavaScript自动化构建工具入门----grunt、gulp、webpack

    蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css   需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动  自动化时代的程序员: 希望一切都可以自动完成  ...

  5. RabbitMQ消息队列之一:RabbitMQ的环境安装及配置

    RabbitMQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们 ...

  6. appium 原理解析

    Appium是 c/s模式的appium是基于 webdriver 协议添加对移动设备自化api扩展而成的webdriver 是基于 http协议的,第一连接会建立个 session 会话,并通过 p ...

  7. Pagination(分页) 从前台到后端总结

    一:效果图 下面我先上网页前台和管理端的部分分页效果图,他们用的是一套代码.                                   回到顶部(go to top) 二:上代码前的一些知识 ...

  8. Linux 启动详解之init

    1.init初探 init是Linux系统操作中不可缺少的程序之一.init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等. 内核会在过去曾使用过init的几个 ...

  9. PHP字符串函数-trim()实例用法

    string trim ( string $str [, string $charlist = " \t\n\r\0\x0B" ] )此函数返回字符串 str 去除首尾空白字符后的 ...

  10. 定制自己的vue模版

    前言 使用vue这个框架已经陆陆续续做了好几个项目了,不知不觉也已经在公司呆了4个月,转正了.时间如水...(省略一万字)./咳-不瞎扯了,公司是直接用的官方脚手架生成项目,官方模版没有vuex,ax ...