Vinculando a dados hierárquicos
Controles de fonte de dados podem trabalhar com dados tabulados (dados relacionais ou baseados em tabela) ou dados hierárquicos, ou ambos.Os controles SqlDataSource e ObjectDataSource são exemplos de controles da fonte de dados que trabalham com dados tabulares.ASP.NET também inclui dois controles de fonte de dados que o tornam mais fácil BIND a dados hierárquicos: the XmlDataSource controle, que funciona com XML de um arquivo ou uma seqüência de caracteres, e o SiteMapDataSource controle, que trabalha com dados de navegação no site (que, por padrão, são mantidos sistema autônomo dados XML). Controles de fonte de dados hierárquico são usados nos cenários somente-leitura para exibir dados.
Este tópico fornece informações sobre vinculação de controles vinculados a dados com uma fonte de dados hierárquicos.Para obter informações adicionais sobre os controles XmlDataSource e SiteMapDataSource, consulte Visão Geral sobre o Controle de Servidor Web XmlDataSource e Visão Geral sobre o Controle SiteMapDataSource do Servidor Web.
Vincular um controle hierárquico a dados XML
XML é intrinsecamente hierárquico na estrutura e pode ser exibido nas páginas da Web ASP.NET usando controles hierárquicos ligados a dados, como o controle TreeView ou o Menu.Você pode acoplar a um controle da fonte de dados hierárquico, definindo a propriedade DataSourceID do controle hierárquico como a identificação de um controle XmlDataSource ou um SiteMapDataSource.
O exemplo de código a seguir mostra um controle TreeView acoplado a um controle XmlDataSource.Os dados XML são filtrados utilizando uma consulta XPath.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
Sub SelectRegion(sender As Object, e As EventArgs)
If RegionDropDownList.SelectedValue = "(Show All)" Then
PeopleDataSource.XPath = "/People/Person"
Else
Dim selectedValue As String = ""
Select Case RegionDropDownList.SelectedValue
Case "CA"
selectedValue = "CA"
Case "HI"
selectedValue = "HI"
Case "WA"
selectedValue = "WA"
Case Else
' Invalid value.
End Select
PeopleDataSource.XPath = "/People/Person[Address/Region='" & selectedValue & "']"
End If
PeopleTreeView.DataBind()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" >
<table border="0" cellpadding="3">
<tr>
<td valign="top">
<b>Select Region:</b>
<asp:DropDownList id="RegionDropDownList" AutoPostBack="True"
OnSelectedIndexChanged="SelectRegion">
<asp:ListItem Selected="True">(Show All)</asp:ListItem>
<asp:ListItem>CA</asp:ListItem>
<asp:ListItem>HI</asp:ListItem>
<asp:ListItem>WA</asp:ListItem>
</asp:DropDownList>
</td>
<td valign="top">
<asp:XmlDataSource
id="PeopleDataSource"
XPath="/People/Person"
DataFile="~/App_Data/people.xml" />
<asp:TreeView
id="PeopleTreeView"
DataSourceID="PeopleDataSource">
<DataBindings>
<asp:TreeNodeBinding DataMember="LastName" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="FirstName" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Street" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="City" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Region" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="ZipCode" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Title" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Description" TextField="#InnerText" />
</DataBindings>
</asp:TreeView>
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
void SelectRegion(object sender, EventArgs e)
{
if (RegionDropDownList.SelectedValue == "(Show All)")
PeopleDataSource.XPath = "/People/Person";
else
{
string selectedValue = "";
switch (RegionDropDownList.SelectedValue)
{
case "CA":
selectedValue = "CA";
break;
case "HI":
selectedValue = "HI";
break;
case "WA":
selectedValue = "WA";
break;
default:
// Invalid value.
break;
}
PeopleDataSource.XPath = "/People/Person[Address/Region='" + selectedValue + "']";
}
PeopleTreeView.DataBind();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" >
<table border="0" cellpadding="3">
<tr>
<td valign="top">
<b>Select Region:</b>
<asp:DropDownList id="RegionDropDownList" AutoPostBack="True"
OnSelectedIndexChanged="SelectRegion">
<asp:ListItem Selected="True">(Show All)</asp:ListItem>
<asp:ListItem>CA</asp:ListItem>
<asp:ListItem>HI</asp:ListItem>
<asp:ListItem>WA</asp:ListItem>
</asp:DropDownList>
</td>
<td valign="top">
<asp:XmlDataSource
id="PeopleDataSource"
XPath="/People/Person"
DataFile="~/App_Data/people.xml" />
<asp:TreeView
id="PeopleTreeView"
DataSourceID="PeopleDataSource">
<DataBindings>
<asp:TreeNodeBinding DataMember="LastName" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="FirstName" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Street" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="City" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Region" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="ZipCode" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Title" TextField="#InnerText" />
<asp:TreeNodeBinding DataMember="Description" TextField="#InnerText" />
</DataBindings>
</asp:TreeView>
</td>
</tr>
</table>
</form>
</body>
</html>
Vincular um controle tabular a dados XML
Enquanto o controle XmlDataSource é usado principalmente para expor dados XML a controles hierárquicos ligados a dados, como os controles TreeView e Menu, você também pode vincular controles ligados a dados tabulares como um controle GridView ou DataList ao controle XmlDataSource.
Ao vincular um controle ligado a dado tabular ao controle XmlDataSource, o controle ligado a dados processa somente o primeiro nível da hierarquia XML.Entretanto, em um modelo de controle ligado a dados, você também pode usar os métodos XPath e XPathSelect de ligação de dados para vincular a elementos específicos dentro da hierarquia XML.O método XPath de vinculação de dados retorna um valor de um nó ou de um atributo em qualquer lugar na hierarquia.O método XPathSelect retorna uma lista de nós que correspondem a uma expressão XPath, com a qual o controle de dados tabulares pode trabalhar, como se eles fossem uma coleção de registros de dados.
Para mais informações e exemplos, consulte Vinculando um Controle Tabular ao Controle XmlDataSource.
Outros formulários de dados Hierárquicos
Além disso, para vincular controles a um controle XmlDataSource como mostrado neste tópico, você também pode acoplar um controle hierárquico a um arquivo de mapa do site.Para obter mais informações, consulte Mapas do Site do ASP.NET.O exemplo de código a seguir mostra como vincular um controle Menu a um controle SiteMapDataSource.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- For the hover styles of the Menu control to -->
<!-- work correctly, you must include this head -->
<!-- element. -->
<head >
<title>Menu DataBinding Example</title>
</head>
<body>
<form id="form1" >
<h3>Menu DataBinding Example</h3>
<!-- Bind the Menu control to a SiteMapDataSource control. -->
<asp:menu id="NavigationMenu"
disappearafter="2000"
staticdisplaylevels="2"
staticsubmenuindent="10"
orientation="Vertical"
font-names="Arial"
target="_blank"
datasourceid="MenuSource"
>
<staticmenuitemstyle backcolor="LightSteelBlue"
forecolor="Black"/>
<statichoverstyle backcolor="LightSkyBlue"/>
<dynamicmenuitemstyle backcolor="Black"
forecolor="Silver"/>
<dynamichoverstyle backcolor="LightSkyBlue"
forecolor="Black"/>
</asp:menu>
<asp:SiteMapDataSource id="MenuSource"
/>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- For the hover styles of the Menu control to -->
<!-- work correctly, you must include this head -->
<!-- element. -->
<head >
<title>Menu DataBinding Example</title>
</head>
<body>
<form id="form1" >
<h3>Menu DataBinding Example</h3>
<!-- Bind the Menu control to a SiteMapDataSource control. -->
<asp:menu id="NavigationMenu"
disappearafter="2000"
staticdisplaylevels="2"
staticsubmenuindent="10"
orientation="Vertical"
font-names="Arial"
target="_blank"
datasourceid="MenuSource"
>
<staticmenuitemstyle backcolor="LightSteelBlue"
forecolor="Black"/>
<statichoverstyle backcolor="LightSkyBlue"/>
<dynamicmenuitemstyle backcolor="Black"
forecolor="Silver"/>
<dynamichoverstyle backcolor="LightSkyBlue"
forecolor="Black"/>
</asp:menu>
<asp:SiteMapDataSource id="MenuSource"
/>
</form>
</body>
</html>
Para criar dados para o exemplo, você pode copiar os seguintes dados do sitemap exemplo para um arquivo em seu aplicativo da Web chamado WEB.sitemap.
<siteMap>
<siteMapNode url="~\Home.aspx"
title="Home"
description="Home">
<siteMapNode url="~\Music.aspx"
title="Music"
description="Music">
<siteMapNode url="~\Classical.aspx"
title="Classical"
description="Classical"/>
<siteMapNode url="~\Rock.aspx"
title="Rock"
description="Rock"/>
<siteMapNode url="~\Jazz.aspx"
title="Jazz"
description="Jazz"/>
</siteMapNode>
<siteMapNode url="~\Movies.aspx"
title="Movies"
description="Movies">
<siteMapNode url="~\Action.aspx"
title="Action"
description="Action"/>
<siteMapNode url="~\Drama.aspx"
title="Drama"
description="Drama"/>
<siteMapNode url="~\Musical.aspx"
title="Musical"
description="Musical"/>
</siteMapNode>
</siteMapNode>
</siteMap>
Consulte também
Conceitos
Visão Geral sobre o Controle de Servidor Web XmlDataSource
Vinculando um Controle Tabular ao Controle XmlDataSource
Visão Geral sobre o Controle SiteMapDataSource do Servidor Web
Visão Geral do Controle de Menu