ASP.NET 2.0:如何将ASP:菜单绑定到SqlDataSource?

ASP.NET 2.0:如何将ASP:菜单绑定到SqlDataSource?,asp.net,database,menu,aspmenu,Asp.net,Database,Menu,Aspmenu,我发现了如何将asp:菜单绑定到XML。我发现了如何将asp:菜单绑定到站点地图(实际上是将其绑定到XML)。如何将asp:菜单绑定到数据库 .NET Framework提供了多个数据源: 我想使用一个表示SQL Server表中数据的表。数据以每个人都使用的标准格式存储: NodeID ParentNodeID Caption Url ======== ============== ========= =======

我发现了如何将asp:菜单绑定到XML。我发现了如何将asp:菜单绑定到站点地图(实际上是将其绑定到XML)。如何将asp:菜单绑定到数据库

.NET Framework提供了多个数据源:

我想使用一个表示SQL Server表中数据的表。数据以每个人都使用的标准格式存储:

NodeID    ParentNodeID    Caption        Url
========  ==============  =========      =================
{3234...  {3632...        stackoverflow  http://stackov...
{3632...  (null)          Questions      ~/questions.aspx
{3233...  (null)          Tags           ~/tags.aspx
{3235...  {3632...        google         http://www.goo...
返回所有行的查询将是:

SELECT * FROM Nodes
微软打算让我使用什么秘密方法将数据混合到asp:菜单中



更新:aspalliance.com上有一篇好文章:。不幸的是,它描述了如何执行XML数据绑定;虽然我对数据库绑定感兴趣。

在aspalliance.com上有一篇好文章:。每一步都有详细的解释和说明

“在本文中,Michael演示了如何使用ASP.NET 2.0创建一个数据库驱动的分层菜单,只需几行代码。对于需要功能强大、设计简单灵活的专业菜单的人来说,这是一个必读教程。”

其代码可以是:

protected void LoadData()
{
    DataSet ds = new DataSet();
    string connStr = YOUR_CONNECTION_STRING_HERE;
    using(SqlConnection conn = newSqlConnection(connStr))
    {
      string sql = "Select NodeID, Caption, Url, ParentID from Menu";
      SqlDataAdapter da = newSqlDataAdapter(sql, conn);
      da.Fill(ds);
      da.Dispose();
    }
    ds.DataSetName = "Menus";
    ds.Tables[0].TableName = "Menu";
    DataRelation relation = newDataRelation("ParentChild",
     ds.Tables["Menu"].Columns["NodeID"],
     ds.Tables["Menu"].Columns["ParentID"], true);

    relation.Nested = true;
    ds.Relations.Add(relation);

    xmlDataSource.Data = ds.GetXml();
}

菜单不支持绑定到SqlDataSource,因为它是HierarchycalDataboundControl-仅支持Hierarchy数据源。您应该实现自己的HierarchicalDataSourceControl。请查看示例。或者,您可以创建自定义站点地图提供程序,并使用SiteMapDataSource,如图所示。最后,您可以使用哪个绑定到SqlDataSource。

我看到了,它使用XML进行绑定-我问的是数据库绑定。您是认真的吗?在哪里可以看到XML?到底是哪一行?这是一个有效的技巧:从数据库中创建一个数据集,然后以XML(ds.GetXML())的形式公开。只想添加,这段代码本身并不能解决问题。您必须从链接的站点下载示例项目,并使用包含XLT转换的其余代码更改来实现它。本文介绍了一个技巧:该方法获取数据并将其公开为XML。是的,它确实如此。此注释必须至少有10个字符长。