Quantcast
Channel: VBForums
Viewing all articles
Browse latest Browse all 15556

Nav Bar not displaying 1 sub menu

$
0
0
hi
i have a side navbar menu which has 5 parent id i am trying to display a data driven menu.
the 1st, 2nd, 4th and 5th parent id is showing the submenus but the 3rd one is not showing anything. pls. guide.
below is the code for it.

html:
HTML Code:

<div id="mySidenav" class="sidenav">
        <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
            <div>
       
            <%--<div class="brand">
                AspSnippets</div>--%>
            <%--<i class="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content">
            </i>--%>
            <div class="menu-list">
               
                    <asp:Repeater ID="rptCategories" runat="server" OnItemDataBound="rptMenu_OnItemBound">
                        <ItemTemplate>
                            <li data-toggle="collapse" data-target='#<%#Eval("InnerHtml") %>' class="collapsed"><a
                                href='<%#Eval("Url") %>' style="font-size: medium" >
<i class='<%#Eval("CssFont") %>'></i>
                                <%#Eval("InnerHtml")%><span class="arrow"></span></a> </li>
                            <asp:Literal ID="ltrlSubMenu" runat="server" ></asp:Literal>
                        </ItemTemplate>
                    </asp:Repeater>
                 
               
            </div>
       
    </div>

    </div>
    <div id="main">
        <span style="font-size: 30px; cursor: pointer" onclick="openNav()"> Open Menu</span>
    </div>
    <script>
        function openNav() {
            document.getElementById("mySidenav").style.width = "250px";
            document.getElementById("main").style.marginLeft = "250px";
        }

        function closeNav() {
            document.getElementById("mySidenav").style.width = "0";
            document.getElementById("main").style.marginLeft = "0";
        }
    </script>
   

Code:


    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not Me.IsPostBack Then
            Me.BindMenu()
        End If
    End Sub


    Protected Sub rptMenu_OnItemBound(sender As Object, e As RepeaterItemEventArgs)
        If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
            If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
                If Menus IsNot Nothing Then
                    Dim drv As DataRowView = TryCast(e.Item.DataItem, DataRowView)
                    Dim ID As String = drv("MainID").ToString()
                    Dim Title As String = drv("InnerHtml").ToString()
                    Dim rows As DataRow() = Menus.[Select](Convert.ToString("ParentId=") & ID)
                    If rows.Length > 0 Then

                        Dim sb As New StringBuilder()
                        sb.Append((Convert.ToString("<ul id='") & Title) + "' class='sub-menu collapse'>")
                        For Each item In rows
                            Dim parentId As String = item("MainID").ToString()
                            Dim parentTitle As String = item("InnerHtml").ToString()

                            Dim parentRow As DataRow() = Menus.[Select](Convert.ToString("ParentId=") & parentId)

                            If parentRow.Count() > 0 Then
                                sb.Append((Convert.ToString("<li data-toggle='collapse' data-target='#") & parentTitle) + "' class='collapsed'><a  style='font-size: medium'  href='" + item("Url") + "'>" + item("InnerHtml") + "<span class='arrow'></span></a>")
                                sb.Append("</li>")
                            Else
                                sb.Append("<li><a  style='font-size: medium'  href='" + item("Url") + "'>" + item("InnerHtml") + "</a>")
                                sb.Append("</li>")
                            End If
                            sb = CreateChild(sb, parentId, parentTitle, parentRow)
                        Next
                        sb.Append("</ul>")
                        TryCast(e.Item.FindControl("ltrlSubMenu"), Literal).Text = sb.ToString()
                    End If
                End If
            End If
        End If
   
    End Sub


    Private Function CreateChild(sb As StringBuilder, parentId As String, parentTitle As String, parentRows As DataRow()) As StringBuilder
        If parentRows.Length > 0 Then
            sb.Append((Convert.ToString("<ul id='") & parentTitle) + "' class='sub-menu collapse'>")
            For Each item In parentRows
                Dim childId As String = item("MainID").ToString()
                Dim childTitle As String = item("InnerHtml").ToString()
                Dim childRow As DataRow() = Menus.[Select](Convert.ToString("ParentId=") & childId)

                If childRow.Count() > 0 Then
                    sb.Append((Convert.ToString("<li data-toggle='collapse' data-target='#") & childTitle) + "' class='collapsed'><a  style='font-size: medium' href='" + item("Url") + "'>" + item("InnerHtml") + "<span class='arrow'></span></a>")
                    sb.Append("</li>")
                Else
                    sb.Append("<li><a  style='font-size: medium'  href='" + item("Url") + "'>" + item("InnerHtml") + "</a>")
                    sb.Append("</li>")
                End If
                CreateChild(sb, childId, childTitle, childRow)
            Next

            sb.Append("</ul>")
        End If
   

        Return sb
    End Function


    Private Sub BindMenu()
        ' Menus = GetData("SELECT [MenuId], [ParentMenuId], [Title], [Description], [Url],[CssFont] FROM [Menus]")
        Menus = GetData("SELECT [MainID], [ParentId], [InnerHtml], [InnerHtml], [Url],[CssFont] FROM [MenuList] WHERE LoginType = 'Admin' Order By MyOrder")
        Dim view As New DataView(Menus)
        view.RowFilter = "ParentId=0"
        Me.rptCategories.DataSource = view
        Me.rptCategories.DataBind()
        'Menus = GetData("SELECT [MenuId], [ParentMenuId], [Title], [Description], [Url],[CssFont] FROM [Menus]")
        'Dim view As New DataView(Menus)
        'view.RowFilter = "ParentMenuId=0"
        'Me.rptCategories.DataSource = view
        'Me.rptCategories.DataBind()

    End Sub

    Private Function GetData(query As String) As DataTable
        Dim dt As New DataTable()
        Dim constr As String = ConfigurationManager.ConnectionStrings("SqlConnectionString").ConnectionString
        Using con As New SqlConnection(constr)
            Using cmd As New SqlCommand(query)
                Using sda As New SqlDataAdapter()
                    cmd.CommandType = CommandType.Text
                    cmd.Connection = con
                    sda.SelectCommand = cmd
                    sda.Fill(dt)
                End Using
            End Using
            Return dt
        End Using
    End Function

i have checked the datatable all the records are perfect in that. seems i am missing out on some minor point.
Thanks in advance

Viewing all articles
Browse latest Browse all 15556

Trending Articles