【问题标题】:ASP.NET 2.0: How to bind an asp:Menu to an SqlDataSource?ASP.NET 2.0:如何将 asp:Menu 绑定到 SqlDataSource?
【发布时间】:2008-11-12 15:58:40
【问题描述】:

我找到了如何将 asp:Menu 绑定到 XML。我找到了如何将 asp:Menu 绑定到站点地图(实际上是将其绑定到 XML)。如何将 asp:Menu 绑定到数据库?

.NET Framework 提供多种数据源:

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

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

Microsoft 打算使用什么秘密方法将这些数据混合到 asp:Menu 中?


更新: aspalliance.com 上有一篇好文章:Building a Database Driven Hierarchical Menu using ASP.NET 2.0。不幸的是,它描述了如何执行 XML 数据绑定;而我对数据库绑定感兴趣。

【问题讨论】:

  • 文章描述了一个技巧:方法获取数据并将其公开为 XML。
  • 是的,确实如此。并且此评论的长度必须至少为 10 个字符。

标签: asp.net database menu aspmenu


【解决方案1】:

aspalliance.com 上有一篇好文章:Building a Database Driven Hierarchical Menu using ASP.NET 2.0。每个步骤都有解释和很好的说明。

“在本文中,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();
}

【讨论】:

  • 我看到了,它正在使用 XML 进行绑定 - 我在询问数据库绑定。
  • 你是认真的吗?您在哪里看到 XML?究竟是哪一行?
  • 这是一个行之有效的技巧:创建数据库中的数据集,然后以 XML (ds.GetXML()) 的形式公开。
  • 只是想补充一下,这段代码本身并不能解决问题。您必须从链接站点下载示例项目,并使用包括 XLT 转换的其余代码更改来实现它。
【解决方案2】:

菜单不支持绑定到 SqlDataSource,因为它是 HierarchicalDataBoundControl - 仅支持分层数据源。您应该实现自己的 HierarchicalDataSourceControl。以here 为例。或者,您可以创建一个自定义站点地图提供程序并使用 SiteMapDataSource,如 here 所示。最后你可以使用a 3'rd party control,它可以绑定到SqlDataSource。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多