带分层数据的菜单

时间:2012-09-22 18:13:38

标签: asp.net vb.net

我在此表单中有类别的分层表NodeID ParentID NodeName

以下是我使用的代码生成ASP.NET MENU ITEMS并将其绑定到MENU CONTROL

Private Sub displayMenu()
        Using con As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("HagglerEntLibConStr").ConnectionString)
            Using sql As New SqlCommand("Select NodeID,ParentID,NodeName FROM Nodes", con)
                con.Open()
                Dim r As SqlDataReader = sql.ExecuteReader 'stored procedure that returns the above SqlDataReader
                Dim tempMaster As New MenuItem()
                Dim bagMaster(700) As MenuItem
                Dim j As Integer = 0
                Do While r.Read()
                    tempMaster.Value = r("NodeID").ToString()
                    tempMaster.ToolTip = r("ParentID").ToString()
                    tempMaster.Text = r("NodeName").ToString()
                    tempMaster.NavigateUrl = ""
                    bagMaster(j) = tempMaster
                    j += 1
                    tempMaster = New MenuItem()
                Loop
                r.Close()
                Menu1.Items.Clear()
                For i As Integer = 0 To j - 1
                    If i = 0 Then
                        Menu1.Items.Add(bagMaster(i))
                    Else
                        For x As Integer = 0 To j - 1
                            If bagMaster(i).ToolTip = bagMaster(x).Value Then
                                Dim c As MenuItem = bagMaster(x)
                                'you can change the tool tip here if you want
                                c.ChildItems.Add(bagMaster(i))
                            End If
                        Next x
                    End If
                Next i
                'Menu1.Items.RemoveAt(0)

            End Using

        End Using

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        displayMenu()
    End Sub 

一切正常......但这种方法的主要缺点是Menu CONTROL创建HTML TABLES ...我在表中有大约1000行...这创建了一个多级菜单。 ..它在页面中添加了很多HTML Tables并大大增加了页面加载时间...我该如何解决这个问题?这是菜单填充的方式。

enter image description here

1 个答案:

答案 0 :(得分:1)

您是否尝试使用RenderingMode属性?

值:

  • 默认。 (这是默认值)。渲染模式取决于RenderingCompatibility控件属性,如果此设置设置为 3.5 ,则默认渲染为table,如果此值为 4.0 ,默认呈现模式是列表ul。您可以在web.config文件中全局更改此设置:

    <system.web>
        <pages controlRenderingCompatibilityVersion="4.0"/>
    </system.web>
    
  • 表。呈现为表格

  • 列表。呈现为列表

更新1

由于您使用的是.Net Framework 3.5,可能最好的方法是使用Control Adapters

基本上,适配器适用于特定控件,在适配器中,您可以更新目标控件的呈现,在本例中为Menu控件

我还没有创建一个控制适配器,所以我不能给你更多的信息,除了指向你正确的方向,谷歌搜索我发现这篇文章看起来很有希望:

http://msdn.microsoft.com/en-us/magazine/cc163543.aspx