ASP.NET 2.0: как связать меню asp: с SqlDataSource?
Я нашел, как привязать asp: меню к XML. я нашел, как привязать asp: Menu к карте сайта (которая действительно привязывает его к XML). Как вы привязываете asp: Menu к базе данных?
.NET Framework предоставляет несколько источников данных:
Я хочу использовать тот, который представляет данные из таблицы SQL Server. Данные хранятся в стандартном иерархическом формате, который каждый использует:
NodeID ParentNodeID Caption Url
======== ============== ========= =================
{3234... {3632... stackru 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 ответа
Меню не поддерживает привязку к SqlDataSource, потому что это HierarchicalDataBoundControl - поддерживаются только иерархические источники данных. Вы должны реализовать свой собственный HierarchicalDataSourceControl. Проверьте здесь для примера. В качестве альтернативы вы можете создать пользовательский поставщик карты сайта и использовать SiteMapDataSource, как показано здесь. Наконец, вы можете использовать сторонний элемент управления, который может связываться с SqlDataSource.
На 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();
}