Hi,
Based on the demo in http://demos.telerik.com/aspnet-mvc/dialog/treeview-integration. i am trying to achieve a filter in the treelist control. But the data i am binding in the treelist has about 5000 records, hence the filtering takes about 7 seconds, please advise if the code provided in the demo is suitable for this scenario or do i need to use a different approach.
Also i am using the selected property of the item to decide on the selection in the treelist, and setting the selected item text to a textbox, if i change the textbox would want to unselect the selected item in the treelist, is this possible.
@Html.Kendo().TextBoxFor(t => t.Name).Name("LocationName")<button id="ShowAll" class="k-button AllLoad" onclick="ShowAll();">Show all</button><div class="dropdowndiv" id="divLocationId" style="display:none; overflow:auto; text-align: left; z-index:999999; position:absolute;background-color:white;border:1px solid #c3d9f9;width:488px;padding-left:2px" onblur="hideAll();"> @(Html.Kendo().TreeView().Name("TreeViewDropDown") .AutoBind(false).Events(ev => ev.DataBound("treeViewDataBound")) .DataTextField("text") .BindTo(Model.LocationList).Events(e=>e.Select("onSelection")) )</div ><script> $(document).ready(function () { $("#LocationName").on("input", function () { $('#divLocationId').slideDown(200); var query = this.value.toLowerCase(); var dataSource = $("#TreeViewDropDown").data("kendoTreeView").dataSource; filter(dataSource, query); matchColors(query); }); }); function onSelection(e) { if (e.node.childElementCount > 1) { e.preventDefault(); return; } $("#LocationName").val(e.node.innerText); $("#locationId").val(e.node.innerText); } function ShowAll() { $('#divLocationId').slideDown(200); var dataSource = $("#TreeViewDropDown").data("kendoTreeView").dataSource; filter(dataSource, ""); } function treeViewDataBound(e) { e.sender.expand(e.node); } function filter(dataSource, query) { var hasVisibleChildren = false; var data = dataSource instanceof kendo.data.HierarchicalDataSource && dataSource.data(); for (var i = 0; i < data.length; i++) { var item = data[i]; var text = item.text.toLowerCase(); var itemVisible = query === true // parent already matches || query === "" // query is empty || text.indexOf(query) >= 0; // item text matches query var anyVisibleChildren = filter(item.children, itemVisible || query); // pass true if parent matches hasVisibleChildren = hasVisibleChildren || anyVisibleChildren || itemVisible; item.hidden = !itemVisible && !anyVisibleChildren; } if (data) { // re-apply filter on children dataSource.filter({ field: "hidden", operator: "neq", value: true }); } return hasVisibleChildren; } function matchColors(query, element) { $("#TreeViewDropDown .k-in:containsIgnoreCase('" + query + "')").each(function () { var index = $(this).html().toLowerCase().indexOf(query.toLowerCase()); var length = query.length; var original = $(this).html().substr(index, length); var newText = $(this).html().replace(original, "<span class='query-match'>" + original + "</span>"); $(this).html(newText); }); } $.expr[':'].containsIgnoreCase = function (n, i, m) { return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; }; function hideAll() { $('#divLocationId').slideUp('fast'); } $(document).ready(function () { var grid = $("#Feedback").data("kendoGrid"); if (grid != undefined || grid != null) DisplayNavigationMessage("Feedback"); grid = $("#FeedbackQuestions").data("kendoGrid"); if (grid != undefined || grid != null) DisplayNavigationMessage("FeedbackQuestions"); }); $("body").click(function (e) { if (e.target.className != "dropdowndiv" && e.target.className != "k-icon k-i-expand" && e.target.className != "k-icon k-i-collapse" && e.target.className != "k-button AllLoad") { hideAll(); } });</script>
