• 您的位置我爱Aspx >> .NET专题 >> ASP.NET 2.0中层次数据的处理
  • ASP.NET 2.0中层次数据的处理

  • 作者:陶刚编译  来源:天极  日期:2007-3-18 15:32:53  关键字:.net,asp.net,asp
  • 绑定到站点导航数据(Site Navigation)

      站点导航数据是ASP.NET中的另外一种层次数据。ASP.NET 2.0不仅支持使用ASP.NET中的站点导航API编程访问站点地图数据,还支持使用SiteMapDataSource控件进行宣告式的数据绑定。当你把TreeView(或Menu)控件绑定到SiteMapDataSource的时候,站点地图的Text和Url属性可以绑定到TreeNode(或MenuItem)。尽管你可以用一个数据绑定集合来建立这种绑定,但是这样的操作不是必要的。TreeView和 Menu控件自动地把TreeNode或 MenuItem的Text和NavigateUrl属性绑定到相关的站点地图属性(这是使用SiteMapNode的INavigateUIData接口实现的)。当TreeView和Menu绑定到SiteMapDataSource的时候,它们还有一个特性,会自动地把SelectedNode或SelectedItem属性设置为站点地图中的当前节点。

      下面的例子演示了一个绑定到SiteMapDataSource控件的TreeView。尽管这个例子使用的是数据绑定集合,但是如果你只需要绑定到节点的Text和Url属性,这样的操作就是没必要的。

    <asp:SiteMapDataSource ID="SiteMapSource" runat="server"/>
     <asp:TreeView ID="MyTreeView" SkinId="BulletedList3"
     DataSourceId="SiteMapSource" runat="server">
     <Databindings>
      <asp:TreeNodeBinding TextField="Title" NavigateUrlField="Url" />
     </Databindings>
    </asp:TreeView>

      绑定到关系数据库

      当关系数据库中的多个表通过外部键相关联的时候,也可以用层次结构来表现。例如,在产品数据库中,产品与产品类别关联,它们就可以用类别和产品之间的层次(1对多)关系来表现。尽管当前的ASP.NET版本没有包含一个用于把关系数据显示为层次结构的控件,你仍然可以通过编程填充层次的数据绑定控件(例如TreeView或Menu)的节点/数据项来实现这种目的。下面的例子显示了一个用关系数据库填充的TreeView控件。这个例子利用TreeView的PopulateOnDemand特性,按需求(客户端上扩展某个TreeNode的时候)来填充子节点。

    Sub GetProductCategories(ByVal node As TreeNode)
     Dim categories As CategoryList = WarehouseDB.GetProductCategories()
     Dim c As Category
     For Each c In categories
      Dim newNode As TreeNode = New TreeNode(c.Name, c.Id)
      newNode.SelectAction = TreeNodeSelectAction.Expand
      newNode.PopulateOnDemand = True
      node.ChildNodes.Add(newNode)
     Next
    End Sub

    Sub GetProductsForCategory(ByVal node As TreeNode)
     Dim categoryId As String = node.Value
     Dim products As ProductList = WarehouseDB.GetProductsForCategory(categoryId)
     Dim p As Product
     For Each p In products
      Dim newNode As TreeNode = New TreeNode(p.Name, p.Id)
      node.ChildNodes.Add(newNode)
     Next
    End Sub

    Sub PopulateNode(ByVal source As Object, ByVal e As TreeNodeEventArgs)
     Select Case e.Node.Depth
      Case 0
       GetProductCategories(e.Node)
      Case 1
       GetProductsForCategory(e.Node)
     End Select
    End Sub

    <asp:TreeView ID="TreeView1" OnTreeNodePopulate="PopulateNode" SkinId="Simple" Width="250" ExpandDepth="0" runat="server">
    <Nodes>
    <asp:TreeNode Text="Inventory" SelectAction="Expand" PopulateOnDemand="true"/>
    </Nodes>
    </asp:TreeView>
    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:微软五年磨一剑 解说VS2005
    下一篇:解决Asp.net"代码不紧凑"引起的问题