如何使用 asp.net 网络表单在 telerik 树中实现搜索和过滤
How to implement Search and fillter in telerik tree using asp.net web form
我是 telerik.I 的新手,想过滤 telerik:red 树数据,但无法在收件箱中触发。
我的代码是-
<telerik:RadPane ID="LeftPanelAssigned" runat="server" Width="20%" CssClass="management" OnClientBeforeResize="LeftPanelAssigned_OnClientBeforeResize">
<asp:Label ID="RadTextBox2" Text="Assigned" runat="server" />
<asp:Label ID="txtAssinedcount" ReadOnly="true" runat="server" />
<asp:TextBox ID="txtSearch" runat="server" onkeyup="SearchEmployees(this, '#TreeAssignedWorkflow');" placeholder="Search employee">
</asp:TextBox>
<telerik:RadTreeView ID="TreeAssignedWorkflow" runat="server" CssClass="tree" OnNodeClick="TreeAssignedWorkflow_NodeClick"
OnClientMouseOver="TreeAssignedWorkflowOnClientMouseOver" OnClientMouseOut="TreeAssignedWorkflowOnClientMouseOut"
OnClientContextMenuItemClicked="WFTreeContextMenuClick">
<ContextMenus>
<telerik:RadTreeViewContextMenu ID="RadTreeViewContextMenu1" runat="server">
<Items>
<telerik:RadMenuItem Text="Reference Search">
</telerik:RadMenuItem>
<telerik:RadMenuItem Text="Sort By Date">
</telerik:RadMenuItem>
<telerik:RadMenuItem Text="Sort By Type">
</telerik:RadMenuItem>
</Items>
<CollapseAnimation Type="none" />
</telerik:RadTreeViewContextMenu>
</ContextMenus>
</telerik:RadTreeView>
</telerik:RadPane>
请帮忙。
我最终重写了大部分代码,如果有人感兴趣,我会把它贴在这里。
我的最终结果看起来像这样并且效果很好。
这会在按键时进行过滤,并在清除过滤器文本框时恢复树。
它还会展开并选择所有匹配的节点。
它并不花哨,我相信可以重写它以使其更有效。
var selectednode;
function valueChanging(sender, args) {
var tree = $find("<%= RadTreeView_Organisation.ClientID %>");
var textbox = document.getElementById("<%= Filter.ClientID %>");
//alert(textbox.value);
var searchString = textbox.value;
if (searchString == "") {
ClearFilter();
}
else {
var allNodes = tree.get_allNodes();
var index;
for (index = 0; index < allNodes.length; index++) {
var node = allNodes[index];
node.set_selected(false);
}
for (index = 0; index < allNodes.length; index++) {
var node = allNodes[index];
if (node.get_expanded)
node.collapse();
}
LoopIt(searchString, tree, textbox);
expandit();
}
return false;
}
function ClearFilter() {
var tree = $find("<%= RadTreeView_Organisation.ClientID %>");
var textbox = $find("<%= Filter.ClientID %>");
var allNodes = tree.get_allNodes();
for (index = 0; index < allNodes.length; index++) {
var node = allNodes[index];
node.set_visible(true);
node.set_selected(false);
if (node.get_expanded)
node.collapse();
}
setTimeout(allNodes[0].expand(), 450);
return false;
}
function LoopIt(searchString, tree, textbox) {
var allNodes = tree.get_allNodes();
allNodes[0].expand;
for (var i = 0; i < tree.get_nodes().get_count() ; i++) {
findNodes(tree.get_nodes().getNode(i), searchString);
}
}
function expandit() {
if (selectednode != null) {
selectednode = selectednode.get_parent();
while (selectednode != null) {
// selectednode.set_selected(true);
if (selectednode.expand) {
selectednode.expand();
}
selectednode = selectednode.get_parent();
}
}
}
function findNodes(node, searchString) {
var hasFoundChildren = false;
if (hasFoundChildren || node.get_text().toLowerCase().indexOf(searchString.toLowerCase()) != -1) {
node.set_selected(true);
}
for (var i = 0; i < node.get_nodes().get_count() ; i++) {
hasFoundChildren = findNodes(node.get_nodes().getNode(i), searchString) || hasFoundChildren;
}
if (hasFoundChildren || node.get_text().toLowerCase().indexOf(searchString.toLowerCase()) != -1) {
node.set_visible(true);
node.expand();
if (node.get_text().toLowerCase().indexOf(searchString.toLowerCase()) != -1) {
node.set_selected(true);
for (var i = 0; i < node.get_nodes().get_count() ; i++) {
DisplayChildren(node);
//node.get_nodes().getNode(i).set_visible(true);
}
}
return true;
}
else {
node.set_visible(false);
return false;
}
}
function DisplayChildren(node) {
for (var ee = 0; ee < node.get_nodes().get_count() ; ee++) {
node.get_nodes().getNode(ee).set_visible(true);
//node.get_nodes().getNode(ee).set_expanded(true);
DisplayChildren(node.get_nodes().getNode(ee));
}
}
//end Treeviewfilter
我是 telerik.I 的新手,想过滤 telerik:red 树数据,但无法在收件箱中触发。 我的代码是-
<telerik:RadPane ID="LeftPanelAssigned" runat="server" Width="20%" CssClass="management" OnClientBeforeResize="LeftPanelAssigned_OnClientBeforeResize">
<asp:Label ID="RadTextBox2" Text="Assigned" runat="server" />
<asp:Label ID="txtAssinedcount" ReadOnly="true" runat="server" />
<asp:TextBox ID="txtSearch" runat="server" onkeyup="SearchEmployees(this, '#TreeAssignedWorkflow');" placeholder="Search employee">
</asp:TextBox>
<telerik:RadTreeView ID="TreeAssignedWorkflow" runat="server" CssClass="tree" OnNodeClick="TreeAssignedWorkflow_NodeClick"
OnClientMouseOver="TreeAssignedWorkflowOnClientMouseOver" OnClientMouseOut="TreeAssignedWorkflowOnClientMouseOut"
OnClientContextMenuItemClicked="WFTreeContextMenuClick">
<ContextMenus>
<telerik:RadTreeViewContextMenu ID="RadTreeViewContextMenu1" runat="server">
<Items>
<telerik:RadMenuItem Text="Reference Search">
</telerik:RadMenuItem>
<telerik:RadMenuItem Text="Sort By Date">
</telerik:RadMenuItem>
<telerik:RadMenuItem Text="Sort By Type">
</telerik:RadMenuItem>
</Items>
<CollapseAnimation Type="none" />
</telerik:RadTreeViewContextMenu>
</ContextMenus>
</telerik:RadTreeView>
</telerik:RadPane>
请帮忙。
我最终重写了大部分代码,如果有人感兴趣,我会把它贴在这里。 我的最终结果看起来像这样并且效果很好。
这会在按键时进行过滤,并在清除过滤器文本框时恢复树。 它还会展开并选择所有匹配的节点。 它并不花哨,我相信可以重写它以使其更有效。
var selectednode;
function valueChanging(sender, args) {
var tree = $find("<%= RadTreeView_Organisation.ClientID %>");
var textbox = document.getElementById("<%= Filter.ClientID %>");
//alert(textbox.value);
var searchString = textbox.value;
if (searchString == "") {
ClearFilter();
}
else {
var allNodes = tree.get_allNodes();
var index;
for (index = 0; index < allNodes.length; index++) {
var node = allNodes[index];
node.set_selected(false);
}
for (index = 0; index < allNodes.length; index++) {
var node = allNodes[index];
if (node.get_expanded)
node.collapse();
}
LoopIt(searchString, tree, textbox);
expandit();
}
return false;
}
function ClearFilter() {
var tree = $find("<%= RadTreeView_Organisation.ClientID %>");
var textbox = $find("<%= Filter.ClientID %>");
var allNodes = tree.get_allNodes();
for (index = 0; index < allNodes.length; index++) {
var node = allNodes[index];
node.set_visible(true);
node.set_selected(false);
if (node.get_expanded)
node.collapse();
}
setTimeout(allNodes[0].expand(), 450);
return false;
}
function LoopIt(searchString, tree, textbox) {
var allNodes = tree.get_allNodes();
allNodes[0].expand;
for (var i = 0; i < tree.get_nodes().get_count() ; i++) {
findNodes(tree.get_nodes().getNode(i), searchString);
}
}
function expandit() {
if (selectednode != null) {
selectednode = selectednode.get_parent();
while (selectednode != null) {
// selectednode.set_selected(true);
if (selectednode.expand) {
selectednode.expand();
}
selectednode = selectednode.get_parent();
}
}
}
function findNodes(node, searchString) {
var hasFoundChildren = false;
if (hasFoundChildren || node.get_text().toLowerCase().indexOf(searchString.toLowerCase()) != -1) {
node.set_selected(true);
}
for (var i = 0; i < node.get_nodes().get_count() ; i++) {
hasFoundChildren = findNodes(node.get_nodes().getNode(i), searchString) || hasFoundChildren;
}
if (hasFoundChildren || node.get_text().toLowerCase().indexOf(searchString.toLowerCase()) != -1) {
node.set_visible(true);
node.expand();
if (node.get_text().toLowerCase().indexOf(searchString.toLowerCase()) != -1) {
node.set_selected(true);
for (var i = 0; i < node.get_nodes().get_count() ; i++) {
DisplayChildren(node);
//node.get_nodes().getNode(i).set_visible(true);
}
}
return true;
}
else {
node.set_visible(false);
return false;
}
}
function DisplayChildren(node) {
for (var ee = 0; ee < node.get_nodes().get_count() ; ee++) {
node.get_nodes().getNode(ee).set_visible(true);
//node.get_nodes().getNode(ee).set_expanded(true);
DisplayChildren(node.get_nodes().getNode(ee));
}
}
//end Treeviewfilter