Edit this page

Server Templates


You can use the NodeTemplate for both setting template to a single navigation node and to all nodes in a navigation(applied as global template). For example you can set a global template to all navigation nodes and if you need to further customize only a single orseveral nodes you can do so by applying the NodeTemplate again only to the needed nodes. This can be done in the TemplateNeeded event.


The following example (Figure 1.) shows a navigation that uses a global template for all parent and child nodes:

Figure 1: Using NodeTemplate as a global template applied to all nodes.


<telerik:RadNavigation runat="server" ID="RadNavigation2"  DataKeyNames="Text,Checked" DataFieldID="Id" DataFieldParentID="ParentId" DataTextField="Text">
protected void Page_Load(object sender, EventArgs e)
    List<CustomNavigatorNode> nodes = new List<CustomNavigatorNode>();

    nodes.Add(new CustomNavigatorNode(1, "Home", true, "http://localhost"));
    nodes.Add(new CustomNavigatorNode(2, "Products", false, "http://localhost/Products"));
    nodes.Add(new CustomNavigatorNode(3, "About", false, "http://localhost/About"));
    nodes.Add(new CustomNavigatorNode(4, "Product 1", false, "http://localhost/Product-1", 2));
    nodes.Add(new CustomNavigatorNode(5, "Product 2", false, "http://localhost/Product-2", 2));
    nodes.Add(new CustomNavigatorNode(6, "Product 3", false, "http://localhost/Product-3", 2));

    RadNavigation1.DataSource = nodes;
    RadNavigation1.NodeTemplate = new CustomDataBoundTemplate();

public class CustomDataBoundTemplate : ITemplate
    public void InstantiateIn(Control container)
        CheckBox checkbox = new CheckBox();
        checkbox.ID = "CheckBox1";
        checkbox.DataBinding += delegate
            NavigationNode bindingContainer = (NavigationNode)checkbox.BindingContainer;
            checkbox.Checked = (bool)bindingContainer.TemplateData["Checked"];

        Label label = new Label();
        label.ID = "Label1";
        label.DataBinding += delegate
            NavigationNode bindingContainer = (NavigationNode)label.BindingContainer;
            label.Text = bindingContainer.TemplateData["Text"].ToString();
        Label label1 = new Label();
        label1.ID = "Toggle";
        label1.CssClass = "rnvToggle radIcon";

        label1.DataBinding += delegate
            NavigationNode bindingContainer = (NavigationNode)label1.BindingContainer;
            if (bindingContainer.Nodes.Count > 0)
                label1.Visible = true;
                label1.Visible = false;

public class CustomNavigatorNode
    public int Id { get; set; }
    public string Text { get; set; }
    public bool Checked { get; set; }
    public string Url { get; set; }
    public int? ParentId { get; set; }

    public CustomNavigatorNode() { }

    public CustomNavigatorNode(int id, string text, bool isChecked, string url, int? parentId = null)
        Id = id;
        Text = text;
        Checked = isChecked;
        Url = url;
        ParentId = parentId;
Protected Sub Page_Load(sender As Object, e As EventArgs)
    Dim nodes As New List(Of CustomNavigatorNode)()

    nodes.Add(New CustomNavigatorNode(1, "Home", True, "http://localhost"))
    nodes.Add(New CustomNavigatorNode(2, "Products", False, "http://localhost/Products"))
    nodes.Add(New CustomNavigatorNode(3, "About", False, "http://localhost/About"))
    nodes.Add(New CustomNavigatorNode(4, "Product 1", False, "http://localhost/Product-1", 2))
    nodes.Add(New CustomNavigatorNode(5, "Product 2", False, "http://localhost/Product-2", 2))
    nodes.Add(New CustomNavigatorNode(6, "Product 3", False, "http://localhost/Product-3", 2))

    RadNavigation1.DataSource = nodes
    RadNavigation1.NodeTemplate = New CustomDataBoundTemplate()
End Sub

Public Class CustomDataBoundTemplate
    Implements ITemplate
    Public Sub InstantiateIn(container As Control)
        Dim checkbox As New CheckBox()
        checkbox.ID = "CheckBox1"
        checkbox.DataBinding += Sub()
                                    Dim bindingContainer As NavigationNode = DirectCast(checkbox.BindingContainer, NavigationNode)
                                    checkbox.Checked = CBool(bindingContainer.TemplateData("Checked"))

                                End Sub

        Dim label As New Label()
        label.ID = "Label1"
        label.DataBinding += Sub()
                                 Dim bindingContainer As NavigationNode = DirectCast(label.BindingContainer, NavigationNode)
                                 label.Text = bindingContainer.TemplateData("Text").ToString()

                             End Sub
        Dim label1 As New Label()
        label1.ID = "Toggle"
        label1.CssClass = "rnvToggle radIcon"

        label1.DataBinding += Sub()
                                  Dim bindingContainer As NavigationNode = DirectCast(label1.BindingContainer, NavigationNode)
                                  If bindingContainer.Nodes.Count > 0 Then
                                      label1.Visible = True
                                      label1.Visible = False
                                  End If

                              End Sub
    End Sub
End Class

Public Class CustomNavigatorNode
    Public Property Id() As Integer
            Return m_Id
        End Get
        Set(value As Integer)
            m_Id = Value
        End Set
    End Property
    Private m_Id As Integer
    Public Property Text() As String
            Return m_Text
        End Get
        Set(value As String)
            m_Text = Value
        End Set
    End Property
    Private m_Text As String
    Public Property Checked() As Boolean
            Return m_Checked
        End Get
        Set(value As Boolean)
            m_Checked = Value
        End Set
    End Property
    Private m_Checked As Boolean
    Public Property Url() As String
            Return m_Url
        End Get
        Set(value As String)
            m_Url = Value
        End Set
    End Property
    Private m_Url As String
    Public Property ParentId() As System.Nullable(Of Integer)
            Return m_ParentId
        End Get
        Set(value As System.Nullable(Of Integer))
            m_ParentId = Value
        End Set
    End Property
    Private m_ParentId As System.Nullable(Of Integer)

    Public Sub New()
    End Sub

    Public Sub New(id**1 As Integer, text**2 As String, isChecked As Boolean, url**3 As String, Optional parentId**4 As System.Nullable(Of Integer) = Nothing)
        Id = id__1
        Text = text__2
        Checked = isChecked
        Url = url__3
        ParentId = parentId__4
    End Sub
End Class

See Also