我发现了如何将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数据绑定;虽然我对数据库绑定感兴趣。
答案 0 :(得分:10)
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();
}
答案 1 :(得分:4)
该菜单不支持绑定到SqlDataSource,因为它是HierarchicalDataBoundControl - 仅支持分层数据源。您应该实现自己的HierarchicalDataSourceControl。请查看here以获取示例。或者,您可以创建自定义站点地图提供程序并使用SiteMapDataSource作为演示here。最后,您可以使用可绑定到SqlDataSource的a 3'rd party control。