ASP.NET 2.0: cómo vincular un menú asp: a un SqlDataSource?
database menu (2)
He encontrado cómo enlazar un asp: Menú a XML. He encontrado cómo vincular un menú asp: Menu a un mapa del sitio (que realmente lo vincula a XML). ¿Cómo se vincula un asp: Menú a una base de datos?
.NET Framework proporciona múltiples fuentes de datos:
Quiero usar uno que represente datos de una tabla de SQL Server. Los datos se almacenan en el formato jerárquico estándar que todos utilizan:
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...
Y la consulta para devolver todas las filas sería:
SELECT * FROM Nodes
¿Cuál es el método secreto que Microsoft pretendía que use para mezclar esos datos en un asp: Menu?
Actualización: hay un buen artículo en aspalliance.com: creación de un menú jerárquico controlado por la base de datos utilizando ASP.NET 2.0 . Desgraciadamente, describe cómo realizar el enlace de datos XML; mientras estoy interesado en el enlace de la base de datos.
Hay un buen artículo en aspalliance.com: Creación de un menú jerárquico controlado por la base de datos utilizando ASP.NET 2.0 . Cada paso se explica y se ilustra muy bien.
"En este artículo, Michael demuestra cómo crear un menú jerárquico basado en bases de datos con solo unas pocas líneas de código usando ASP.NET 2.0. Este es un tutorial de lectura obligada para todos los que necesitan un menú profesional que sea potente y flexible con un diseño simple. "
El código para podría ser:
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();
}
El menú no admite el enlace a SqlDataSource porque es un HierarchicalDataBoundControl: solo se admiten las fuentes de datos jerárquicas. Debería implementar su propio HierarchicalDataSourceControl. Mira aquí para ver un ejemplo. De forma alternativa, podría crear un proveedor de mapa de sitio personalizado y usar SiteMapDataSource como se muestra aquí . Finalmente puede usar un control de parte 3 '' que puede enlazar a SqlDataSource.