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





На 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 - я спрашиваю о привязке к базе данных.
Ты серьезно? Где так вы видите XML? Какая именно линия?
Это действенный трюк: создается набор данных из базы данных, который затем отображается как XML (ds.GetXML ()).
Сразу хочу добавить, сам этот код проблему не решит. Вам необходимо загрузить образец проекта со связанного сайта и реализовать его с остальными изменениями кода, которые также включают преобразование XLT.
Меню не поддерживает привязку к SqlDataSource, поскольку это HierarchicalDataBoundControl - поддерживаются только иерархические источники данных. Вы должны реализовать свой собственный HierarchicalDataSourceControl. Посмотрите, например, здесь. В качестве альтернативы вы можете создать собственный поставщик карты сайта и использовать SiteMapDataSource, как показано здесь. Наконец, вы можете использовать сторонний контроль, который может связываться с SqlDataSource.
В статье описывается трюк: метод получает данные и предоставляет их в виде XML.