I needed a way to create a TreeView in VB.NET that contained a node for each month of the year, and each month node had to contain a node for each Monday within that month. A ‘Week Commencing’ type of view. This type of problem always seems better solved with LINQ, so here’s how I did it:
Private Function GenNode() As TreeNode
Dim rootNode As New TreeNode("Week Commencing")
' Create a list containing every date of the year
Dim dateList As New List(Of Date)
Dim dateIterator As New Date(Year(Now), 1, 1)
Do Until dateIterator.Year <> Year(Now)
dateList.Add(dateIterator)
dateIterator = dateIterator.AddDays(1)
Loop
' Now, using LINQ, create the TreeNodes
Dim t = From d In dateList Group d By m = d.Month Into Group Select
New TreeNode(MonthName(m),
(From d1 In dateList Where d1.Month = m And d1.DayOfWeek = DayOfWeek.Monday Select New TreeNode(d1.ToString("dd-MM-yyyy"))).ToArray) Distinct
rootNode.Nodes.AddRange(t.ToArray)
Return rootNode
End Function
For more information on LINQ, see the following link 🙂
http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx