Frage

Ich habe ein JavaScript -Array von Objekten, mit denen ich eine Radtreeview bevölkern möchte. Ich kann nicht herausfinden, wie ich dies von der Client -Seite von anderem von meiner eigenen Bindungsmethode für meine Sammlung von Objekten ausführen kann.

Jedes Objekt in meinem JavaScript -Array hat

ID Parentid Value Text

Gibt es keine Möglichkeit, einen ganzen Baum automatisch von dieser JavaScript -Datenstruktur auf der Client -Seite zu bevölkern? Muss ich das 1-mal-1 machen? Indem Sie mein Array durchqueren und rekursiv den Baum hinuntergehen?

Ich verwende einen Webdienst, um ein JSON -Objekt mit diesen Daten zu erhalten, und möchte den Baum vollständig erstellen, nicht nur auf dem erweiterten Knoten.

War es hilfreich?

Lösung

Anscheinend gibt es keine Möglichkeit, einen ganzen Baum von der Client -Seite zu binden. Das Beste, was Sie tun können, ist Knoten der ersten Stufe zu binden. Wenn der Benutzer auf jeden einzelnen klickt, können Sie die untergeordneten Knoten bevölkern, die einen weiteren Web-Methode-Anruf machen.

<telerik:RadTreeView OnClientNodeClicking="PopulateChild" DataTextField="Text" 
                            ID="datesTree" runat="server">
                            <WebServiceSettings Path="../AcmeWebService.asmx" Method="GetRootNodes" />
  <Nodes>
    <telerik:RadTreeNode Text="Root Node" ImageUrl="../images/truckicon.png"  ExpandMode="WebService" />
  </Nodes>
</telerik:RadTreeView>

Ihre Getrootnodes -Methode kann so aussehen:

[WebMethod, ScriptMethod]
public RadTreeNodeData[] GetRootNodes(RadTreeNodeData node, object context)
{
    DataTable productCategories = GetProductCategories(node.Value);
    List<RadTreeNodeData> result = new List<RadTreeNodeData>();
    foreach (DataRow row in productCategories.Rows)
    {
        RadTreeNodeData itemData = new RadTreeNodeData(); 
        itemData.Text = row["Title"].ToString(); 
        itemData.Value = row["CategoryId"].ToString();
        if (Convert.ToInt32(row["ChildrenCount"]) > 0) 
        { 
            itemData.ExpandMode = TreeNodeExpandMode.WebService; 
        }
        result.Add(itemData);
    }
    return result.ToArray();
}

Populatechild Client-Side-Methode kann so etwas sein wie:

function PopulateChild(sender, args) {
var treeView = $find('datesTree');

    var nodeText = "";

    $.ajax({
        type: "POST",
        url: "../AcmeWebService.asmx/GetChildNodes",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: "{'nodeText': '" + nodeText + "','nodeValue': '" + args.get_node().get_value() + "','param2':'" + treeView.get_allNodes()[0].get_value() + "' }",
        success: function(msg) {
            if (treeView != null) {
                treeView.trackChanges();
                var parent = treeView.get_selectedNode() || treeView;
                var count = parent.get_nodes().get_count();
                for (var i = 0; i < msg.d.length; i++) {
                    var node = new Telerik.Web.UI.RadTreeNode();                                                
                    node.set_text(msg.d[i].Text);
                    node.set_value(msg.d[i].ParentID);
                    node.set_expanded(true);
                    parent.get_nodes().add(node);
                }
                treeView.commitChanges();
            }
        }
    });

}

Und auf der Webdienstmethode, um die untergeordneten Knoten zu bevölkern, können so etwas wie:

[WebMethod, ScriptMethod]
public IEnumerable<YourNode> GetChildNodes(string nodeText, string nodeValue, int param2)
{
   //call your DAL with any parameter you passed in from above
   IEnumerable<YourNode> nodes = ...
   return nodes;
}

Anmerkung 0 Die obige Methode gibt kein Array von Radtreenodedata zurück. Es kann jede Sammlung Ihrer eigenen benutzerdefinierten Objekte sein. Gleiches gilt für die GetRootNodes Es ist nur so, dass ich das von Teleriks Website kopiert habe;)

Anmerkung 1: Ich hatte einmal ein ähnliches Szenario und habe diese Technik zum Laden von Knoten der ersten Stufe und das Laden der anderen auf Client-Klick verwendet. Einige der hier geposteten Code sind eine verkleinerte Version meines ursprünglichen Code.

Ich hoffe, es hilft.

Andere Tipps

Gemäß der Dokumentation die Client -Seite Nodes Eigenschaft ist schreibgeschützt:

Das RadTreeview -Client -Objekt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top