ASP.NET 2.0: Как связать меню asp: с SqlDataSource? - PullRequest
5 голосов
/ 12 ноября 2008

я нашел, как связать asp: Menu с XML. я нашел, как привязать asp: Menu к карте сайта (которая действительно привязывает его к XML). Как привязать asp: Menu к базе данных?

.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

Каков секретный метод, который Microsoft намеревался использовать для смешивания этих данных в меню asp: Menu?


Обновление: На aspalliance.com есть хорошая статья: Создание иерархического меню на основе базы данных с использованием ASP.NET 2.0 . К сожалению, он описывает, как выполнить привязку данных XML; пока меня интересует привязка базы данных.

Ответы [ 2 ]

10 голосов
/ 12 ноября 2008

На aspalliance.com есть хорошая статья: Построение иерархического меню на основе базы данных с использованием ASP.NET 2.0 . Каждый шаг объясняется и красиво иллюстрируется.

"В этой статье Майкл демонстрирует, как создать управляемое базой данных иерархическое меню с помощью всего лишь нескольких строк кода с использованием 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();
}
4 голосов
/ 14 ноября 2008

Меню не поддерживает привязку к SqlDataSource, потому что это HierarchicalDataBoundControl - поддерживаются только иерархические источники данных. Вы должны реализовать свой собственный HierarchicalDataSourceControl. Проверьте здесь для примера. В качестве альтернативы вы можете создать пользовательский поставщик карты сайта и использовать SiteMapDataSource, как показано здесь . Наконец, вы можете использовать сторонний элемент управления , который может связываться с SqlDataSource.

...