Vb.net 如何以编程方式使用带嵌套项目符号列表的asp repeater

Vb.net 如何以编程方式使用带嵌套项目符号列表的asp repeater,vb.net,treeview,html-lists,repeater,bulletedlist,Vb.net,Treeview,Html Lists,Repeater,Bulletedlist,我对在vb中使用转发器还不熟悉,我试图理解如何通过编程方式使用嵌套的项目符号列表。我有在System.Web.UI.WebControls.TreeView对象中生成数据的代码,我正试图将其放入嵌套的bulletedlist中。我有以下vb和asp代码: TreeView.aspx <asp:Repeater ID="repeater" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBou

我对在vb中使用转发器还不熟悉,我试图理解如何通过编程方式使用嵌套的项目符号列表。我有在
System.Web.UI.WebControls.TreeView
对象中生成数据的代码,我正试图将其放入嵌套的bulletedlist中。我有以下vb和asp代码:
TreeView.aspx

<asp:Repeater ID="repeater" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound">
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
    <ItemTemplate>
        <li>
            <asp:BulletedList ID="bulletedList" runat="server"></asp:BulletedList>
        </li>
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>
<asp:Repeater ID="rptr" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound">
    <HeaderTemplate>
        <ul>
            <li>My WorkPlace
                <ul>
    </HeaderTemplate>
    <ItemTemplate>
        <li id="listItem" runat="server"></li>
    </ItemTemplate>
    <FooterTemplate>
                </ul>
            </li>
        </ul>
    </FooterTemplate>
</asp:Repeater>

我仍然无法使用列表进行嵌套。我最终希望实现上面提到的嵌套列表。请告知,以便我可以纠正我的方法。

虽然我更愿意使用
,但我有使用
HtmlGenericControl,
  • 的解决方案:

    TreeView.aspx

    <asp:Repeater ID="repeater" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li>
                <asp:BulletedList ID="bulletedList" runat="server"></asp:BulletedList>
            </li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
    
    <asp:Repeater ID="rptr" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound">
        <HeaderTemplate>
            <ul>
                <li>My WorkPlace
                    <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li id="listItem" runat="server"></li>
        </ItemTemplate>
        <FooterTemplate>
                    </ul>
                </li>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
    
    
    
    • 我的工作场所
    TreeView.aspx.vb

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim tNode As TreeNode
        Dim treeView As New TreeView
        Dim tNodeCollection As New TreeNodeCollection
        tNodeCollection = treeView.Nodes
    
        ' Code to generate and store within
        ' a System.Web.UI.WebControls.TreeView object
        ' ...
        ' ...
        ' ...
    
        repeater.DataSource = tNodeCollection          '''<-----UPDATED
        repeater.DataBind()
    End Sub
    
    ''' UPDATED 
    Private Sub searchChildNodes(childNodes As TreeNodeCollection, bList As BulletedList)
        Dim tNode As TreeNode
        For Each tNode In childNodes
            bList.Items.Add(tNode.Value)
            If tNode.ChildNodes.Count > 0 Then
                searchChildNodes(tNode.ChildNodes, bList)
            End If
        Next
    End Sub
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim tNode As TreeNode
        Dim treeView As New TreeView
        Dim tNodeCollection As New TreeNodeCollection
        tNodeCollection = treeView.Nodes
    
        ' Code to generate and store within
        ' a System.Web.UI.WebControls.TreeView object
        ' ...
        ' ...
        ' ...
    
        repeater.DataSource = tNodeCollection          '''<-----UPDATED
        repeater.DataBind()
    End Sub
    
    Protected Sub repeater_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
        Dim tNode As TreeNode
        Dim li As New HtmlGenericControl
        Dim ul As New HtmlGenericControl("ul")
        tNode = e.Item.DataItem
    
        If (tNode Is Nothing) Then
            Return
        End If
    
        li = e.Item.FindControl("listItem")
        li.ID = tNode.Value
        li.InnerHtml = tNode.Text
    
        If tNode.ChildNodes.Count > 0 Then
            li.Controls.Add(ul)
            searchChildNodes(tNode.ChildNodes, ul)
        End If
    End Sub
    
    Private Sub searchChildNodes(childNodes As TreeNodeCollection, ul As HtmlGenericControl)
        Dim tNode As TreeNode
        For Each tNode In childNodes
            Dim li As New HtmlGenericControl("li")
            li.ID = tNode.Value
            li.InnerHtml = tNode.Text
            ul.Controls.Add(li)
            If tNode.ChildNodes.Count > 0 Then
                Dim unorderedList As New HtmlGenericControl("ul")
                li.Controls.Add(unorderedList)
                searchChildNodes(tNode.ChildNodes, unorderedList)
            End If
        Next
    End Sub
    
    Protected Sub Page_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
    树状结构
    暗淡的树状视图作为新树状视图
    Dim tNodeCollection作为新的TreeNodeCollection
    tNodeCollection=treeView.Nodes
    '要在其中生成和存储的代码
    '一个System.Web.UI.WebControl.TreeView对象
    ' ...
    ' ...
    ' ...
    repeater.DataSource=tNodeCollection''0
    li.Controls.Add(ul)
    searchChildNodes(tNode.ChildNodes,ul)
    如果结束
    端接头
    私有子searchChildNodes(childNodes作为TreeNodeCollection,ul作为HtmlGenericControl)
    树状结构
    对于子节点中的每个tNode
    Dim li作为新的HtmlGenericControl(“li”)
    li.ID=tNode.Value
    li.InnerHtml=tNode.Text
    ul.控制添加(li)
    如果tNode.ChildNodes.Count>0,则
    Dim无序列表作为新的HtmlGenericControl(“ul”)
    li.Controls.Add(无序列表)
    searchChildNodes(tNode.ChildNodes,无序列表)
    如果结束
    下一个
    端接头
    
    虽然我更喜欢使用
    ,但我有使用
    HtmlGenericControl,
    • 的解决方案:

      TreeView.aspx

      <asp:Repeater ID="repeater" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound">
          <HeaderTemplate>
              <ul>
          </HeaderTemplate>
          <ItemTemplate>
              <li>
                  <asp:BulletedList ID="bulletedList" runat="server"></asp:BulletedList>
              </li>
          </ItemTemplate>
          <FooterTemplate>
              </ul>
          </FooterTemplate>
      </asp:Repeater>
      
      <asp:Repeater ID="rptr" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound">
          <HeaderTemplate>
              <ul>
                  <li>My WorkPlace
                      <ul>
          </HeaderTemplate>
          <ItemTemplate>
              <li id="listItem" runat="server"></li>
          </ItemTemplate>
          <FooterTemplate>
                      </ul>
                  </li>
              </ul>
          </FooterTemplate>
      </asp:Repeater>
      
      
      
      • 我的工作场所
      TreeView.aspx.vb

      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          Dim tNode As TreeNode
          Dim treeView As New TreeView
          Dim tNodeCollection As New TreeNodeCollection
          tNodeCollection = treeView.Nodes
      
          ' Code to generate and store within
          ' a System.Web.UI.WebControls.TreeView object
          ' ...
          ' ...
          ' ...
      
          repeater.DataSource = tNodeCollection          '''<-----UPDATED
          repeater.DataBind()
      End Sub
      
      ''' UPDATED 
      Private Sub searchChildNodes(childNodes As TreeNodeCollection, bList As BulletedList)
          Dim tNode As TreeNode
          For Each tNode In childNodes
              bList.Items.Add(tNode.Value)
              If tNode.ChildNodes.Count > 0 Then
                  searchChildNodes(tNode.ChildNodes, bList)
              End If
          Next
      End Sub
      
      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          Dim tNode As TreeNode
          Dim treeView As New TreeView
          Dim tNodeCollection As New TreeNodeCollection
          tNodeCollection = treeView.Nodes
      
          ' Code to generate and store within
          ' a System.Web.UI.WebControls.TreeView object
          ' ...
          ' ...
          ' ...
      
          repeater.DataSource = tNodeCollection          '''<-----UPDATED
          repeater.DataBind()
      End Sub
      
      Protected Sub repeater_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
          Dim tNode As TreeNode
          Dim li As New HtmlGenericControl
          Dim ul As New HtmlGenericControl("ul")
          tNode = e.Item.DataItem
      
          If (tNode Is Nothing) Then
              Return
          End If
      
          li = e.Item.FindControl("listItem")
          li.ID = tNode.Value
          li.InnerHtml = tNode.Text
      
          If tNode.ChildNodes.Count > 0 Then
              li.Controls.Add(ul)
              searchChildNodes(tNode.ChildNodes, ul)
          End If
      End Sub
      
      Private Sub searchChildNodes(childNodes As TreeNodeCollection, ul As HtmlGenericControl)
          Dim tNode As TreeNode
          For Each tNode In childNodes
              Dim li As New HtmlGenericControl("li")
              li.ID = tNode.Value
              li.InnerHtml = tNode.Text
              ul.Controls.Add(li)
              If tNode.ChildNodes.Count > 0 Then
                  Dim unorderedList As New HtmlGenericControl("ul")
                  li.Controls.Add(unorderedList)
                  searchChildNodes(tNode.ChildNodes, unorderedList)
              End If
          Next
      End Sub
      
      Protected Sub Page_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
      树状结构
      暗淡的树状视图作为新树状视图
      Dim tNodeCollection作为新的TreeNodeCollection
      tNodeCollection=treeView.Nodes
      '要在其中生成和存储的代码
      '一个System.Web.UI.WebControl.TreeView对象
      ' ...
      ' ...
      ' ...
      repeater.DataSource=tNodeCollection''0
      li.Controls.Add(ul)
      searchChildNodes(tNode.ChildNodes,ul)
      如果结束
      端接头
      私有子searchChildNodes(childNodes作为TreeNodeCollection,ul作为HtmlGenericControl)
      树状结构
      对于子节点中的每个tNode
      Dim li作为新的HtmlGenericControl(“li”)
      li.ID=tNode.Value
      li.InnerHtml=tNode.Text
      ul.控制添加(li)
      如果tNode.ChildNodes.Count>0,则
      Dim无序列表作为新的HtmlGenericControl(“ul”)
      li.Controls.Add(无序列表)
      searchChildNodes(tNode.ChildNodes,无序列表)
      如果结束
      下一个
      端接头
      
      似乎没有为中继器指定数据源,因此
      repeater.DataBind()
      可能是冗余的(实际上,它可能正在清除中继器)。此外,我不确定项目符号列表控件是否支持嵌套。讨论嵌套中继器,快速搜索显示有几种方法可以将树视图呈现为无序列表(但尚未尝试)。您是对的。repeater.DataBind()正在清除repeater,删除它后,列表将立即加载(但它不是嵌套的)。同样是的,bulletedlist不支持本机嵌套,这就是为什么我选择按建议使用中继器。我主要关心的是获取嵌套列表,目前我无法使用这些列表。似乎没有为中继器指定数据源,因此
      repeater.DataBind()
      可能是多余的(实际上,它可能正在清除中继器)。此外,我不确定项目符号列表控件是否支持嵌套。讨论嵌套中继器,快速搜索显示有几种方法可以将树视图呈现为无序列表(但尚未尝试)。您是对的。repeater.DataBind()正在清除repeater,删除它后,列表将立即加载(但它不是嵌套的)。同样是的,bulletedlist不支持本机嵌套,这就是为什么我选择按建议使用中继器。我主要关心的是获取嵌套列表,而目前我无法使用这些列表。