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 >

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>

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 >
    <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>

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

Referenz

Übersicht über das TreeView-Webserversteuerelement