1
이 클래스의 데이터를 부모, 자식, 손자, greatgrandchild 등의 중첩 목록으로 가져 오는 데 사용할 수있는 컨트롤/메소드를 다른 사람이 도울 수 있습니까?이 데이터 클래스의 데이터 출력
나는 실행하면 :
Dim menu As New MenuBuilder
Response.Write(menu.BuildMenu().ToString)
가 난 단지
감사 하위 레벨의 최상위 링크 없음을 얻는다.
Public Class MenuBuilder
Private _rawData As List(Of MenuData) = MenuDataImport.GetMenuData()
Public Function BuildMenu() As String
'create a new list with the top level0 items only
Dim builtMenu As New List(Of MenuData)(_rawData.FindAll(Function(item) item.GroupingID = 0))
'sort the top level items
builtMenu.Sort(Function(a, b) a.OrderID - b.OrderID)
'get the children items
For Each menuData As MenuData In builtMenu
If menuData.Children IsNot Nothing Then
menuData.Children.AddRange(GetChildren(menuData))
End If
Next
Dim Builder = New StringBuilder()
'builtMenu contains the right items with the right children in order.
For Each menuData As MenuData In builtMenu
If menuData.Url IsNot Nothing And menuData.Moduleid = 0 Then
'format as a standard link
Builder.AppendFormat("<a href=""http://{0}"" target=""{1}"">{2}</a>", menuData.Url, menuData.Urltarget, menuData.Heading)
ElseIf InStr(menuData.Url, "file:///") Then
'format as a file link
Builder.AppendFormat("<a href={0} target=""{1}"">{2}</a>", menuData.Url, menuData.Urltarget, menuData.Heading)
Else
'format as a querystring id link
Builder.AppendFormat("<a href=Default.aspx?id={0}>{1}</a>", menuData.Id, menuData.Heading)
End If
If menuData.Children IsNot Nothing Then
For Each child As MenuData In menuData.Children
If child.Url IsNot Nothing And child.Moduleid = 0 Then
'format as a standard link
Builder.AppendFormat("<a href=""http://{0}"" target=""{1}"">{2}</a>", child.Url, child.Urltarget, child.Heading)
ElseIf InStr(child.Url, "file:///") Then
'format as a file link
Builder.AppendFormat("<a href={0} target=""{1}"">{2}</a>", child.Url, child.Urltarget, child.Heading)
Else
'format as a querystring id link
Builder.AppendFormat("<a href=Default.aspx?id={0}>{1}</a>", child.Id, child.Heading)
End If
For Each grandChild As MenuData In child.Children
If grandChild.Url IsNot Nothing And grandChild.Moduleid = 0 Then
'format as a standard link
Builder.AppendFormat("<a href=""http://{0}"" target=""{1}"">{2}</a>", grandChild.Url, grandChild.Urltarget, grandChild.Heading)
ElseIf InStr(grandChild.Url, "file:///") Then
'format as a file link
Builder.AppendFormat("<a href={0} target=""{1}"">{2}</a>", grandChild.Url, grandChild.Urltarget, grandChild.Heading)
Else
'format as a querystring id link
Builder.AppendFormat("<a href=Default.aspx?id={0}>{1}</a>", grandChild.Id, grandChild.Heading)
End If
For Each greatgrandChild As MenuData In grandChild.Children
If greatgrandChild.Url IsNot Nothing And greatgrandChild.Moduleid = 0 Then
'format as a standard link
Builder.AppendFormat("<a href=""http://{0}"" target=""{1}"">{2}</a>", greatgrandChild.Url, greatgrandChild.Urltarget, greatgrandChild.Heading)
ElseIf InStr(grandChild.Url, "file:///") Then
'format as a file link
Builder.AppendFormat("<a href={0} target=""{1}"">{2}</a>", greatgrandChild.Url, greatgrandChild.Urltarget, greatgrandChild.Heading)
Else
'format as a querystring id link
Builder.AppendFormat("<a href=Default.aspx?id={0}>{1}</a>", greatgrandChild.Id, greatgrandChild.Heading)
End If
Next
Next
Next
End If
Next
Return Builder.ToString()
End Function
Private Function GetChildren(ByVal parent As MenuData) As List(Of MenuData)
Dim children As List(Of MenuData) = _rawData.FindAll(Function(item) item.GroupingID = parent.Id)
'sort the menu items
children.Sort(Function(a, b) a.OrderID - b.OrderID)
'get children's children
For Each menuData As MenuData In children
If menuData.Children IsNot Nothing Then
menuData.Children.AddRange(GetChildren(menuData))
End If
Next
Return children
End Function
End Class
내가 당신에게 전체 파일을 이메일로 전송하기 때문에 아래의 코드에 수정을 만들었습니다. –