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:
i have checked the datatable all the records are perfect in that. seems i am missing out on some minor point.
Thanks in advance
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()">×</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
Thanks in advance