2013-01-20 32 views
1

我在RadCombobox中有RadTreeView。 我需要使用javascipt創建函數,因爲我想在關閉RadComboBox後讀取所有選中的項目及其值。如何獲得客戶端RadTreeView中的所有選中項和值?

我怎樣才能得到所有使用JavaScript檢查項目和值?

這是我的源代碼:

function OnClientDropDownClosed() 
     { 
      //Foreach all checked items and save to array 
      //I want to need for example: Text: John Black, Value: 1 
     } 

<telerik:RadComboBox ID="RadComboBox1" OnClientDropDownClosed="OnClientDropDownClosed" runat="server" Width="500px" ShowToggleImage="True" 
       ExpandAnimation-Type="None" 
       CollapseAnimation-Type="None"> 
       <ItemTemplate> 
        <div id="div1"> 
         <telerik:RadTreeView runat="server" ID="RadTreeView1" CheckBoxes="true" Width="100%" 
          Height="140px" TriStateCheckBoxes="true"> 
          <Nodes> 
           <telerik:RadTreeNode runat="server" Text="Company" Value="9" Expanded="true"> 
            <Nodes> 
             <telerik:RadTreeNode runat="server" Text="Employees A" Value="10" Expanded="true"> 
              <Nodes> 
               <telerik:RadTreeNode runat="server" Value="1" Text="John Black"> 
               </telerik:RadTreeNode> 

               <telerik:RadTreeNode runat="server" Value="2" Text="Peter Snopy"> 
               </telerik:RadTreeNode> 

               <telerik:RadTreeNode runat="server" Value="3" Text="George New"> 
               </telerik:RadTreeNode> 

               <telerik:RadTreeNode runat="server" Value="4" Text="William Wall"> 
               </telerik:RadTreeNode> 
              </Nodes> 
             </telerik:RadTreeNode> 

             <telerik:RadTreeNode runat="server" Text="Employees B" Value="11" Expanded="true"> 
              <Nodes> 
               <telerik:RadTreeNode runat="server" Value="5" Text="John Black"> 
               </telerik:RadTreeNode> 

               <telerik:RadTreeNode runat="server" Value="6" Text="Peter Snopy"> 
               </telerik:RadTreeNode> 

               <telerik:RadTreeNode runat="server" Value="7" Text="George New"> 
               </telerik:RadTreeNode> 

               <telerik:RadTreeNode runat="server" Value="8" Text="William Wall"> 
               </telerik:RadTreeNode> 
              </Nodes> 
             </telerik:RadTreeNode> 
            </Nodes> 
           </telerik:RadTreeNode> 
          </Nodes> 
         </telerik:RadTreeView> 
        </div> 
       </ItemTemplate> 
       <Items> 
        <telerik:RadComboBoxItem Text="" /> 
       </Items> 
      </telerik:RadComboBox> 

回答

1

您可以使用TreeView.get_nodes()TreeNode.get_nodes(),但這些只會給你直接的節點,而不是它們的完整後代。

因此,對於具有不同層次節點的RadTreeView,我們需要有一個遞歸函數來深入到整個節點層次結構中。

這個答案是從wizpert的回答改編,這Telerik的博客: http://www.telerik.com/blogs/how-to-get-the-checked-items-from-a-treeview-with-checkboxes

function OnClientDropDownClosed(sender, eventArgs) 
{ 
    // first let's get hold of the treeview (sender is the combobox) 
    var tree = sender.get_items().getItem(0).findControl("RadTreeView1"); 

    // pass the treeview nodes to another function to find the checked nodes 
    var items = getCheckedNodes(tree.get_nodes()); 

    var text = 'None selected'; // default text 

    if (items.length > 0) 
    { 
     var texts = []; 
     for (var i = 0; i < items.length; i++) 
     { 
      // extract the text only of the checked nodes 
      texts.push(items[i].get_text()); 
     } 
     text = texts.join(', '); // comma separated text 
    } 

    sender.set_text(text); // set the combobox text 
} 

function getCheckedNodes(nodes) { 
    var node, childCheckedNodes; 
    var checkedNodes = []; // array of the checked nodes 

    for (var i = 0; i < nodes.get_count(); i++) { 
     node = nodes.getNode(i); 
     if (node.get_checked()) { 
      checkedNodes.push(node); // add to array if checked 
     } 

     // to understand recursion, first you must understand recursion 
     if (node.get_nodes().get_count() > 0) 
     { 
      // recursive function call 
      childCheckedNodes = getCheckedNodes(node.get_nodes()); 

      if (childCheckedNodes.length > 0) 
      { 
       // append array with results from recursive call 
       checkedNodes = checkedNodes.concat(childCheckedNodes); 
      } 
     } 
    } 

    return checkedNodes; 
} 
2

,如果我理解你的問題的權利,你要選中節點的文本和值添加到javacript一個數組,這裏是解決方案:

function OnClientDropDownClosed(sender, eventArgs) 
{ 
var arr_of_nodes = new Array(); 

var tree=sender.get_items().getItem(0).findControl("RadTreeView1"); 
var treenodes=tree.get_nodes(); 
    for (i=0; i<treenodes.get_count(); i++) 
    { 

     if (treenodes.getNode(i).get_checked()) 
     { 
     var _nodeText=treenodes.getNode(i).get_text(); 
     var _nodeValue=treenodes.getNode(i).get_value(); 
     arr_of_nodes.push(_nodeText+":"+_nodeValue); 

     } 
    } 
//do something with the array arr 
} 
+0

這只是迭代的第一級節點。你有多級樹視圖的遞歸函數嗎? –

+0

請參閱我的答案使用多級節點的遞歸函數 –

相關問題