Skip to main content

ASPxTreeList.VirtualModeNodeCreating Event

Enables you to initialize nodes in a tree virtual mode.

Namespace: DevExpress.Web.ASPxTreeList

Assembly: DevExpress.Web.ASPxTreeList.v24.2.dll

Declaration

public event TreeListVirtualModeNodeCreatingEventHandler VirtualModeNodeCreating

Event Data

The VirtualModeNodeCreating event's data class is TreeListVirtualModeNodeCreatingEventArgs. The following properties provide information specific to this event:

Property Description
IsLeaf Gets or sets whether the processed node has zero child nodes.
NodeKeyValue Gets or sets the processed node’s key value.
NodeObject Gets the object that corresponds to the processed node in a tree.

The event data class exposes the following methods:

Method Description
SetNodeValue(String, Object) Assigns a value to the specified cell.

Remarks

In virtual mode a tree is created on demand. In this instance, child nodes are created and initialized when their parent node is expanded.

The ASPxTreeList fires two events that you should process in code. These include:

The VirtualModeNodeCreating event is raised for each node object created within the ASPxTreeList.VirtualModeCreateChildren event handler. This event enables you to initialize the corresponding node in a tree. You should specify the node’s key value and cell values. If you are sure that the processed node has no child nodes, set the event parameter’s TreeListVirtualModeNodeCreatingEventArgs.IsLeaf property to true.

For detailed information, see Virtual Mode.

Example

In this example, the ASPxTreeList uses the Virtual data binding method to display the file/folder tree. In this mode, a tree is created on demand.

The image below shows the result.

exVirtualMode

using System.IO;
using System.Collections.Generic;
using DevExpress.Web.ASPxTreeList;

protected void ASPxTreeList1_VirtualModeCreateChildren(object sender,
TreeListVirtualModeCreateChildrenEventArgs e) {
    string path = e.NodeObject == null ? Page.MapPath("~/") : e.NodeObject.ToString();

    List<string> children = new List<string>();
    if (Directory.Exists(path)) {
        foreach (string name in Directory.GetDirectories(path)) {
            if (!IsSystemName(name))
                children.Add(name);
        }
        foreach (string name in Directory.GetFiles(path))
            if (!IsSystemName(name))
                children.Add(name);
    }
    e.Children = children;
}
protected void ASPxTreeList1_VirtualModeNodeCreating(object sender,
TreeListVirtualModeNodeCreatingEventArgs e) {
    string path = e.NodeObject.ToString();

    e.NodeKeyValue = GetNodeGuid(path);
    e.IsLeaf = !Directory.Exists(path);
    e.SetNodeValue("FileName", PopFileName(path));
}

// Helpers

Guid GetNodeGuid(string path) {
    if (!Map.ContainsKey(path))
        Map[path] = Guid.NewGuid();
    return Map[path];
}
Dictionary<string, Guid> Map {
    get {
        const string key = "DX_PATH_GUID_MAP";
        if (Session[key] == null)
            Session[key] = new Dictionary<string, Guid>();
        return Session[key] as Dictionary<string, Guid>;
    }
}
string PopFileName(string path) {
    return path.Substring(1 + path.LastIndexOf("\\"));
}
bool IsSystemName(string name) {
    name = PopFileName(name).ToLower();
    return name.StartsWith("app_") || name == "bin"
        || name.EndsWith(".aspx.cs") || name.EndsWith(".aspx.vb");
}
See Also