Tray menu: Dynamiske menupunkter med dynamiske underpunkter
Jeg har opbygget en menu, hvor den relevante del kommer fra XML til et Dataset og forbi et Dataview inden det bruges til at opbygge menupunkterne. Jeg har lavet det så et statisk menupunkt kan have variable underpunkter, men kan ikke finde ud af at give de variable underpunkter deres egne variable underpunkter. Beklager de mange informationer, men kan måske hjælpe med at få et overblik over problemet.Dataset strukturen er opbygget på følgende måde:
Projekt 1-----* Task 1-----* SubTask
Tabellerne har følgende informationer:
Projekt: (id, navn)
Task: (id, navn, projekt)
Subtask: (id, navn, task)
Min nuværende menu opbygning ser ud på følgende måde:
Projekt -> (Liste over mulige projekter)
Task -> (Tomt hvis der ikke er valgt et projekt, og viser projektets tasks når et projekt er valgt)
Subtask -> (Tomt hvis der ikke er valgt en task, og viser taskens subtasks når et projekt er valgt)
Jeg vil gerne ændre opbygningen så man ikke behøver at vælge projekt eller task, men kan bevæge sig ind i undermenuer direkte. Opbygningen vil se ud på følgende måde:
Projekt ->
Projekt1 ->
Task1 ->
Subtask1
Subtask2
Task2
Task3
Task4 ->
Subtask3
Projekt2 ->
Task3 ->
Subtask4
*** MIN NUVÆRENDE KODE (relevante områder klippet sammen) ***
*************************************************************
Private Projects As MenuItem
Private Tasks As MenuItem
Private SubTasks As MenuItem
Private Data As New dsProTrackTray
Private Sub BuildMenu()
Me.Menu.MenuItems.Clear()
'PROJECTS - Dataview
Dim dvProj As New DataView(Data.Tables("Project"), _
"", _
"ProjectName", _
DataViewRowState.CurrentRows)
'PROJECTS - Added to menu
Dim drvProj As DataRowView
Projects = Me.Menu.MenuItems.Add("Projects")
For Each drvProj In dvProj
Projects.MenuItems.Add(New MenuItemWithID(CType(drvProj.Row.ItemArray(1), String), AddressOf AppChangeProject, CInt(drvProj.Row.ItemArray(0))))
Next
'TASKS - Dataview
Dim dvTask As New DataView(Data.Tables("Task"), _
"Project = " & CurrentProject, _
"TaskName", _
DataViewRowState.CurrentRows)
'TASKS ARE ADDED
Dim drvTask As DataRowView
Tasks = Me.Menu.MenuItems.Add("Tasks")
If Not CurrentProject = 0 Then
For Each drvTask In dvTask
Tasks.MenuItems.Add(New MenuItemWithID(CType(drvTask.Row.ItemArray(2), String), AddressOf AppChangeTask, CInt(drvTask.Row.ItemArray(0))))
Next
End If
'SUBTASKS - Dataview
Dim dvSubTask As New DataView(Data.Tables("Subtask"), _
"Task = " & CurrentTask, _
"SubTaskName", _
DataViewRowState.CurrentRows)
'SUBTASKS ARE ADDED
Dim drvSubTask As DataRowView
SubTasks = Me.Menu.MenuItems.Add("SubTasks")
If Not CurrentTask = 0 Then
For Each drvSubTask In dvSubTask
SubTasks.MenuItems.Add(New MenuItemWithID(CType(drvSubTask.Row.ItemArray(1), String), AddressOf AppChangeSubTask, CInt(drvSubTask.Row.ItemArray(0))))
Next
End If
End Sub
**********************************************************
**********************************************************
(MenuItemWithID er en overbygning til MenuItem, som gemmer et Id)
