Binden an hierarchische Daten
Aktualisiert: November 2007
Datensteuerelemente können mit tabellarischen Daten (tabellenbasierten oder relationalen Daten), hierarchischen Daten oder mit beiden dieser Arten von Daten arbeiten. Das SqlDataSource-Steuerelement und das ObjectDataSource-Steuerelement sind Beispiele für Datenquellensteuerelemente, die mit tabellarischen Daten arbeiten. ASP.NET enthält außerdem zwei Datenquellensteuerelemente, die die Bindung an hierarchische Daten vereinfachen: das XmlDataSource-Steuerelement, das mit XML in Dateien oder Zeichenfolgen arbeitet, und das SiteMapDataSource-Steuerelement, das mit Sitenavigationsdaten arbeitet (die standardmäßig als XML-Daten verwaltet werden). Hierarchische Datenquellensteuerelemente werden in schreibgeschützten Szenarios verwendet, um Daten anzuzeigen.
Dieses Thema enthält weitere Informationen über das Binden von datengebundenen Steuerelementen an eine hierarchische Datenquelle. Weitere Informationen über das XmlDataSource-Steuerelement und das SiteMapDataSource-Steuerelement finden Sie unter Übersicht über das XmlDataSource-Webserversteuerelement und Übersicht über das SiteMapDataSource-Webserversteuerelement.
Binden eines hierarchischen Steuerelements an XML-Daten
XML-Daten sind stets hierarchisch strukturiert. Zum Anzeigen von XML-Daten in ASP.NET-Webseiten können Sie Steuerelemente verwenden, die an hierarchische Daten gebunden werden, z. B. das TreeView-Steuerelement oder das Menu-Steuerelement. Das Binden an ein hierarchisches Datenquellensteuerelement erfolgt durch Festlegen der DataSourceID-Eigenschaft des hierarchischen Steuerelements auf die ID eines XmlDataSource-Steuerelements oder eines SiteMapDataSource-Steuerelements.
Das folgende Codebeispiel zeigt ein an ein XmlDataSource-Steuerelement gebundenes TreeView-Steuerelement. Die XML-Daten werden durch eine XPath-Abfrage gefiltert.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
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 runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<table border="0" cellpadding="3">
<tr>
<td valign="top">
<b>Select Region:</b>
<asp:DropDownList runat="server" 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"
runat="server"
XPath="/People/Person"
DataFile="~/App_Data/people.xml" />
<asp:TreeView
id="PeopleTreeView"
runat="server"
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 runat="server">
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 runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<table border="0" cellpadding="3">
<tr>
<td valign="top">
<b>Select Region:</b>
<asp:DropDownList runat="server" 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"
runat="server"
XPath="/People/Person"
DataFile="~/App_Data/people.xml" />
<asp:TreeView
id="PeopleTreeView"
runat="server"
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>
Binden eines tabellarischen Steuerelements an XML-Daten
Das XmlDataSource-Steuerelement wird in erster Linie verwendet, um Steuerelementen, die an hierarchische Daten gebunden werden, also z. B. dem TreeView-Steuerelement und dem Menu-Steuerelement, XML-Daten verfügbar zu machen. Doch auch Steuerelemente, die an tabellarische Daten gebunden werden, wie das GridView-Steuerelement oder das DataList-Steuerelement, können an das XmlDataSource-Steuerelement gebunden werden.
Wenn Sie ein Steuerelement, das an tabellarische Daten gebunden wird, an das XmlDataSource-Steuerelement binden, stellt dieses Steuerelement nur die erste Ebene der XML-Hierarchie dar. In einer Vorlage für ein datengebundenes Steuerelement können Sie jedoch auch die XPath-Datenbindungsmethode und die XPathSelect-Datenbindungsmethode verwenden, um an spezifische Elemente innerhalb der XML-Hierarchie zu binden. Die XPath-Datenbindungsmethode gibt einen Wert von einem an einer beliebigen Stelle in der Hierarchie befindlichen Knoten oder Attribut zurück. Die XPathSelect-Methode gibt eine Liste der mit einem XPath-Ausdruck übereinstimmenden Knoten zurück, mit der das Tabellendaten-Steuerelement arbeiten kann wie mit einer Auflistung von Datensätzen.
Weitere Informationen und Beispiele finden Sie unter Binden eines tabellarischen Steuerelements an das XmlDataSource-Steuerelement.
Andere Formen hierarchischer Daten
Neben dem in diesem Thema beschriebenen Binden von Steuerelementen an ein XmlDataSource-Steuerelement können Sie ein hierarchisches Steuerelement auch an eine Siteübersichtsdatei binden. Weitere Informationen finden Sie unter ASP.NET-Siteübersichten. Im folgenden Codebeispiel wird veranschaulicht, wie ein Menu-Steuerelement an ein SiteMapDataSource-Steuerelement gebunden wird.
<%@ 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 runat="server">
<title>Menu DataBinding Example</title>
</head>
<body>
<form id="form1" runat="server">
<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"
runat="server">
<staticmenuitemstyle backcolor="LightSteelBlue"
forecolor="Black"/>
<statichoverstyle backcolor="LightSkyBlue"/>
<dynamicmenuitemstyle backcolor="Black"
forecolor="Silver"/>
<dynamichoverstyle backcolor="LightSkyBlue"
forecolor="Black"/>
</asp:menu>
<asp:SiteMapDataSource id="MenuSource"
runat="server"/>
</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 runat="server">
<title>Menu DataBinding Example</title>
</head>
<body>
<form id="form1" runat="server">
<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"
runat="server">
<staticmenuitemstyle backcolor="LightSteelBlue"
forecolor="Black"/>
<statichoverstyle backcolor="LightSkyBlue"/>
<dynamicmenuitemstyle backcolor="Black"
forecolor="Silver"/>
<dynamichoverstyle backcolor="LightSkyBlue"
forecolor="Black"/>
</asp:menu>
<asp:SiteMapDataSource id="MenuSource"
runat="server"/>
</form>
</body>
</html>
Um Daten für das Beispiel zu erstellen, können Sie die Daten der folgenden Siteübersichtsdatei in eine Datei Ihrer Webabwendung mit dem Namen Web.sitemap kopieren.
<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>
Siehe auch
Konzepte
Übersicht über das XmlDataSource-Webserversteuerelement
Binden eines tabellarischen Steuerelements an das XmlDataSource-Steuerelement
Übersicht über das SiteMapDataSource-Webserversteuerelement
Übersicht über das Menü-Steuerelement