Articles in this section
Category / Section

How to populate WinForms TreeViewAdv from DataTable?

2 mins read

Populate TreeViewAdv from DataTable

Currently in TreeViewAdv, there is no direct support for loading TreeNodeAdv from DataTable. You need it to populate TreeViewAdv, by recursively loading data from the DataTable. The following code example is to demonstrate the same.

C#

//Create Data Table
dt = new DataTable("CaseNotes");
dt.Columns.Add("NoteID", typeof(string));
dt.Columns.Add("NoteName", typeof(string));
//Add sample data.
dt.Rows.Add(new string[] { "1", "One" });
dt.Rows.Add(new string[] { "2", "Two" });
//Create nodes
private void CreateNodes()
{
    //Create TreeNodesAdv
    DataRow[] rows = new DataRow[dt.Rows.Count];
    dt.Rows.CopyTo(rows, 0);
    //TreeView node creation
    treeViewAdv1.BeginUpdate();
    treeViewAdv1.Nodes.Clear();            
    TreeNodeAdv[] nodes = RecurseRows(rows);
    treeViewAdv1.Nodes.AddRange(nodes);
    // Notify the TreeView to resume painting.
    treeViewAdv1.EndUpdate();
}
//ReCurseRows function
private TreeNodeAdv[] RecurseRows(DataRow[] rows)
{
     List<TreeNodeAdv> nodeList = new List<TreeNodeAdv>();
     TreeNodeAdv node = null;
     foreach (DataRow dr in rows)
     {
        node = new TreeNodeAdv(dr["NoteName"].ToString());
        noteID = Convert.ToInt32(dr["NoteID"]);
        node.Text = noteID.ToString();
        if (nodeList.Find(FindNode) == null)
           {
               DataRow[] childRows = dt.Select("ParentNoteID = " + dr["NoteID"]);
               if (childRows.Length > 0)
                  {
            //Recursively call this function for all childRowsl
                     TreeNodeAdv[] childNodes = RecurseRows(childRows);
                     // Add all child nodes to this node.
                     node.Nodes.AddRange(childNodes);
                  }
                nodeList.Add(node);
            }
      }
            //Convert this List<TreeNodeAdv> to an array so it can be added to the parent node/TreeView
            TreeNodeAdv[] nodeArr = nodeList.ToArray();
            return nodeArr;
}

VB

'Create Data Table
dt = New DataTable("CaseNotes")
dt.Columns.Add("NoteID", GetType(System.String))
dt.Columns.Add("NoteName", GetType(System.String))
'Add sample data.
dt.Rows.Add(New String() {"1", "One"})
dt.Rows.Add(New String() {"2", "Two"})
'Create nodes
Private Sub CreateNodes()
    'Create TreeNodesAdv
    Dim rows() As DataRow = New DataRow((dt.Rows.Count) - 1) {}
    dt.Rows.CopyTo(rows, 0)
    'TreeView node creation
    treeViewAdv1.BeginUpdate()
    treeViewAdv1.Nodes.Clear()
    Dim nodes() As TreeNodeAdv = RecurseRows(rows)
    treeViewAdv1.Nodes.AddRange(nodes)
    ' Notify the TreeView to resume painting.
    treeViewAdv1.EndUpdate()
End Sub
'ReCurseRows function
Private Function RecurseRows(ByVal rows() As DataRow) As TreeNodeAdv()
     Dim nodeList As List(Of TreeNodeAdv) = New List(Of TreeNodeAdv)
     Dim node As TreeNodeAdv = Nothing
     For Each dr As DataRow In rows
         node = New TreeNodeAdv(dr("NoteName").ToString)
         noteID = Convert.ToInt32(dr("NoteID"))
         node.Text = noteID.ToString
         If (nodeList.Find(FindNode) Is Nothing) Then
             Dim childRows() As DataRow = dt.Select(("ParentNoteID = " + dr("NoteID")))
             If (childRows.Length > 0) Then
                'Recursively call this function for all childRowsl
                Dim childNodes() As TreeNodeAdv = RecurseRows(childRows)
                'Add all child nodes to this node.
                 node.Nodes.AddRange(childNodes)
              End If
              nodeList.Add(node)
         End If
      Next
      'Convert this List<TreeNodeAdv> to an array so it can be added to the parent node/TreeView
      Dim nodeArr() As TreeNodeAdv = nodeList.ToArray
      Return nodeArr
End Function

Sample: http://www.syncfusion.com/downloads/support/directtrac/general/TreeViewFromDataTable1602064888.zip

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied