2008-11-12 13 views
5

He encontrado cómo vincular 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?ASP.NET 2.0: cómo enlazar un menú asp: a un SqlDataSource?

El .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 estándar hierarchical que todo el mundo utiliza:

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 me la intención de utilizar a mezcla esos datos en un asp: Menú?


Actualización: Hay un buen artículo sobre aspalliance.com: Building a Database Driven Hierarchical Menu using 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.

+1

El artículo describe un truco: El método obtiene los datos y los expone como XML. – splattne

+2

Sí, lo hace. Y este comentario debe tener al menos 10 caracteres de largo. –

Respuesta

4

El menú no es compatible con la unión a SqlDataSource porque es un HierarchicalDataBoundControl - sólo fuentes de datos jerárquicas son compatibles. Debería implementar su propio HierarchicalDataSourceControl. Consulte here para ver un ejemplo.De forma alternativa, puede crear un proveedor de mapa de sitio personalizado y usar SiteMapDataSource como se demostró en here. Finalmente, puede usar a 3'rd party control, que puede vincularse a SqlDataSource.

+0

fiesta en 3D es genial: D pero ... $ 1,299 – Cynede

10

Hay un buen artículo en aspalliance.com: Building a Database Driven Hierarchical Menu using ASP.NET 2.0. Cada paso se explica y se ilustra muy bien.

"En este artículo, Michael muestra cómo crear un menú jerárquico basado en bases de datos con solo unas líneas de código usando ASP.NET 2.0. Este es un tutorial obligatorio para todos los que necesitan un menú profesional potente y flexible con diseño simplista ".

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(); 
} 
+0

vi eso, está vinculando usando XML - estoy preguntando por la base de datos. –

+0

¿Hablas en serio? ¿Dónde ves el XML? ¿Qué línea exactamente? – Slavo

+0

Es un truco que funciona: se crea un conjunto de datos de la base de datos y luego se expone como XML (ds.GetXML()). – splattne

Cuestiones relacionadas