2012-08-14 112 views
1

我正在使用RadTreeView,這是一個很棒的控制我有一個小問題,我希望你能幫助我,我已經創建了一個下一步按鈕和一個搜索文本框用戶輸入首選搜索條件文本框,然後點擊下一步。RadTreeView節點循環

當他點擊下一步我搜索TreeView並找到TreeView節點中的第一個匹配項並將其選中,當他再次單擊下一步時,我想查找下一個匹配節點並將其選中。

我怎麼能做到這一點謝謝:)我想這是2客戶端如果可能的話

這裏是我到目前爲止的代碼:

<script type="text/javascript"> 
function FindMatchingNodes() { 

      var tree = $find("<%=MainTree.ClientID%>"); 
      var text = document.getElementById("<%=ApplicationSearchResult.ClientID%>").value; 
      var allNodes = tree.get_allNodes(); 

      var array = new Array(); 
      staticVar(); 
      for (var i = 0; i < allNodes.length; i++) { 
       var node = allNodes[i]; 
       var itemText = node.get_text(); 
       var itemValue = node.get_value(); 

       if (text != "") { 
        if (text == itemText) { 
         array.push(itemValue); 
        } 
       } 
      } 
      if (staticVar.counter >= array.length) { staticVar.counter = 0; } 
      var SelectedNode =tree.findNodeByValue(array[staticVar.counter].toString()); 
      var pNode = SelectedNode.get_parent(); 
      SelectedNode.select(); 
      pNode.set_expanded(true); 
      SelectedNode.set_expanded(true); 
      array = null; 

     } 

     function staticVar() { 
      if (staticVar.counter == undefined) { 
       staticVar.counter = 0   
      } 
      else { 
       staticVar.counter++ 
      } 
     } 
</script> 

//標記

<telerik:RadTreeView ID="MainTree" runat="server" CssClass="NewClass" 
     Skin="Office2010Silver"> 
    <Nodes> 
    <telerik:RadTreeNode Selected="true" Text="Hello" Value="0"> 
     <Nodes> 
      <telerik:RadTreeNode runat="server" Text="Hi" Value="1"> 
      </telerik:RadTreeNode> 
     </Nodes> 
     </telerik:RadTreeNode> 
    <telerik:RadTreeNode Text="Hellooooooooooooo" Value="2"> 
     <Nodes> 
      <telerik:RadTreeNode runat="server" Text="helloooo" Value="3"> 
      </telerik:RadTreeNode> 
     </Nodes> 
     </telerik:RadTreeNode> 
<telerik:RadTreeNode runat="server" Owner="MainTree" Text="Hi" Value="4"></telerik:RadTreeNode> 
<telerik:RadTreeNode runat="server" Owner="MainTree" Text="Hiiiiiiiiiiiiiii" Value="5"></telerik:RadTreeNode> 
<telerik:RadTreeNode runat="server" Owner="MainTree" Text="Hello" Value="6" 
      ></telerik:RadTreeNode> 
    </Nodes> 
    <Nodes> 
    <telerik:RadTreeNode Text="Hi" Value="7"></telerik:RadTreeNode> 
    <telerik:RadTreeNode Text="Hiiiiiiiiiiiiiii" Value="8"></telerik:RadTreeNode> 
    <telerik:RadTreeNode Text="Hello" Value="9"></telerik:RadTreeNode> 
    </Nodes> 
    </telerik:RadTreeView> 
    <table border="0"> 
    <tr> 
    <td><telerik:RadTextBox ID="ApplicationSearchResult" runat="server"> 
    <ClientEvents OnKeyPress="KeyPress" /> 
    </telerik:RadTextBox></td> 
    <td><img src="next.png" onclick="FindMatchingNodes();" style="cursor:pointer;" runat="server" height="17" width="17" ID="NextNode" /></td> 
     </tr> 
     </table> 
+0

我已經花了很多晚來檢查telerik論壇,但我找不到什麼幫助我和論壇不回覆,所以請如果有的話ne對於如何實現我的目標有一個更好的主意,請告訴我讚賞 – Sora 2012-08-14 07:14:46

回答

1
function findNext() { 
    var search = $get("<%= ApplicationSearchResult.ClientID %>").value; 

    var treeView = $find("<%= MainTree.ClientID %>"); 
    var selectedNode = treeView.get_selectedNode(); 
    var nodes = treeView.get_allNodes(); 
    var index = selectedNode ? nodes.indexOf(selectedNode) + 1 : 0; 
    for (var itemsProcessed = 0; itemsProcessed < nodes.length; ++itemsProcessed, ++index) { 
      if (index >= nodes.length) 
       index = 0; 

      var node = nodes[index]; 
      if (node.get_text() == search) { 
       if (selectedNode) { 
        selectedNode.unselect(); 
       } 
       node.select(); 
       expandAllAncestors(node); 
       return; 
      } 

    } 
} 

function expandAllAncestors(node) { 
    if (node.get_expanded() !== true) 
      node.expand(); 

    if (node.get_level() != 0) { 
      expandAllAncestors(node.get_parent()); 
    } 
} 
+0

感謝您的回覆,但他們仍然是一個小問題,我如何讓索引在到達樹尾時返回0?所以如果用戶單擊下一步,索引已經在樹的末尾,它不會停止它再次給他第一次發生 – Sora 2012-08-14 09:16:56

+0

我已經編輯答案 – 2012-08-14 09:37:59

+0

沒有悲傷地工作:/ – Sora 2012-08-14 09:46:59