ASP.NET 2.0: как привязать asp: Menu к SqlDataSource?

Я нашел, как привязать 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; пока меня интересует привязка к базе данных.

В статье описывается трюк: метод получает данные и предоставляет их в виде XML.

splattne 13.11.2008 13:01

Да, это так. И этот комментарий должен быть не менее 10 символов.

Ian Boyd 13.11.2008 17:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
2
21 961
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

На 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();
}

Я видел это, он выполняет привязку с использованием XML - я спрашиваю о привязке к базе данных.

Ian Boyd 12.11.2008 22:40

Ты серьезно? Где так вы видите XML? Какая именно линия?

Slavo 13.11.2008 11:51

Это действенный трюк: создается набор данных из базы данных, который затем отображается как XML (ds.GetXML ()).

splattne 13.11.2008 13:02

Сразу хочу добавить, сам этот код проблему не решит. Вам необходимо загрузить образец проекта со связанного сайта и реализовать его с остальными изменениями кода, которые также включают преобразование XLT.

Hammad Khan 20.11.2015 10:34
Ответ принят как подходящий

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

Другие вопросы по теме