Filtern von Daten mit Datenquellensteuerelementen

Aktualisiert: November 2007

Datenquellensteuerelemente stellen verschiedene Datendienste bereit, durch die das Hinzufügen erweiterter Fähigkeiten zu Anwendungen vereinfacht wird. Dazu gehört auch das Filtern von Daten anhand der von Ihnen angegebenen Suchkriterien. Das Filtern ist besonders beim Arbeiten mit zwischengespeicherten Daten nützlich, weil Sie damit Suchfähigkeiten bereitstellen können, ohne Abfragen erneut auszuführen oder Methoden zum Lesen von Daten aufzurufen.

Für das Filtern von Daten muss ein Datenquellensteuerelement wie folgt konfiguriert sein:

Wenn Sie das XmlDataSource-Steuerelement verwenden, können Sie Daten mit XPath-Abfragen filtern. Weitere Informationen finden Sie unter Filtern von Daten mit dem XmlDataSource-Steuerelement.

Festlegen des Filterausdrucks

Der Filter für die Daten, die von den Steuerelementen ObjectDataSource, SqlDataSource und AccessDataSource zurückgegeben werden, wird durch Festlegen der FilterExpression-Eigenschaft des Datenquellensteuerelements definiert. Die Syntax für den Filterausdruck basiert auf der Syntax der Expression-Eigenschaft der DataColumn-Klasse. Der Filterausdruck wird angewendet, wenn die Select -Methode des Datenquellensteuerelements aufgerufen wird.

Bereitstellen der Filterparameter

Sie können für die Steuerelemente ObjectDataSource, SqlDataSource und AccessDataSource einen parametrisierten Filterausdruck bereitstellen. Dadurch können Sie zur Laufzeit Filterausdrücke bereitstellen, ohne Code für eine explizite Festlegung der FilterExpression-Eigenschaft zu schreiben. Die Filterausdrucksparameter werden mit der FilterParameters -Auflistung des Datenquellensteuerelements angegeben. Die Parameter können u. a. Daten von Steuerelementen, vom QueryString-Objekt, vom Sitzungszustand und von Benutzerprofileigenschaften abrufen. Informationen über die Parametertypen, die in der FilterParameters-Auflistung verwendet werden können, finden Sie unter Verwenden von Parametern für Datenquellen-Steuerelemente.

In dem Filterausdruck erstellen Sie Platzhalter, die den Elementen in der FilterParameters-Auflistung des Datenquellensteuerelements entsprechen. Die Platzhalter werden nummeriert, wobei 0 den ersten Parameter in der Auflistung darstellt. Sie geben einen Platzhalter in dem Filterausdruck an, indem Sie die Nummer des Filterparameters in geschweifte Klammern setzen, wie im folgenden Beispiel gezeigt:

Country = '{0}' AND LastName LIKE '{1}'
Sicherheitshinweis:

Weil die Werte der FilterParameters-Auflistung ohne Codierung in die FilterExpression-Zeichenfolge eingesetzt werden, sollten Sie vor der Anwendung eines Filters alle Filterparameter überprüfen. Mit dem Filtering-Ereignis des Datenquellensteuerelements können Sie Filterparameterwerte vor der Anwendung des Filters überprüfen.

Das folgende Beispiel zeigt ein SqlDataSource-Steuerelement mit dem Namen EmployeeDetailsSqlDataSource, das Filterparameter enthält. Die Parameterwerte, die in der FilterExpression-Eigenschaft verwendet werden, werden zur Laufzeit mit den Eigenschaftenwerten aus anderen Steuerelementen auf der Seite gefüllt.

<%@ 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" >
  <head >
    <title>Northwind Employees</title>
</head>
<body>
    <form id="form1" >

      <h3>Northwind Employees</h3>

        <table cellspacing="10">            
          <tr>
            <td valign="top">
              <table border="0">
                <tr>
                  <td valign="top">Country</td>
                  <td><asp:DropDownList  id="CountryListBox" AppendDataBoundItems="True"
                                        DataSourceID="CountrySqlDataSource" 
                                        DataTextField="Country" DataValueField="Country" >
                        <asp:ListItem Selected="True" Value="" >(Show All)</asp:ListItem>
                      </asp:DropDownList>
                  </td>
                </tr>
                <tr>
                  <td>Last Name</td>
                  <td><asp:TextBox  id="LastNameTextBox" Text="*" /></td>
                </tr>
                <tr>
                  <td></td>
                  <td><asp:Button  id="FilterButton" Text="Filter Results" /></td>
                </tr>
              </table>
            </td>

            <td valign="top">                
              <asp:GridView ID="EmployeesGridView"
                DataSourceID="EmployeeDetailsSqlDataSource"
                AutoGenerateColumns="false"
                AllowSorting="True"
                DataKeyNames="EmployeeID"     
                Gridlines="Both"
                RunAt="server">

                <HeaderStyle backcolor="Navy"
                  forecolor="White"/>

                <RowStyle backcolor="White"/>

                <AlternatingRowStyle backcolor="LightGray"/>

                <EditRowStyle backcolor="LightCyan"/>

                <Columns>                  
                  <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" ReadOnly="true"/>                    
                  <asp:BoundField DataField="FirstName"  HeaderText="First Name"/>
                  <asp:BoundField DataField="LastName"   HeaderText="Last Name"/>                    
                  <asp:BoundField DataField="Country"    HeaderText="Country"/>                    
                </Columns>                 
              </asp:GridView>
            </td>                
          </tr>            
        </table>

        <asp:SqlDataSource ID="CountrySqlDataSource" 
          SelectCommand="SELECT DISTINCT Country FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
          RunAt="server" />

        <asp:SqlDataSource ID="EmployeeDetailsSqlDataSource" 
          SelectCommand="SELECT EmployeeID, LastName, FirstName, Country FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
          FilterExpression="Country LIKE '{0}' AND LastName LIKE '{1}'"
          RunAt="server">

          <FilterParameters>
            <asp:ControlParameter ControlID="CountryListBox"   PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="LastNameTextBox" PropertyName="Text" />
          </FilterParameters>
        </asp:SqlDataSource>
      </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" >
  <head >
    <title>Northwind Employees</title>
</head>
<body>
    <form id="form1" >

      <h3>Northwind Employees</h3>

        <table cellspacing="10">            
          <tr>
            <td valign="top">
              <table border="0">
                <tr>
                  <td valign="top">Country</td>
                  <td><asp:DropDownList  id="CountryListBox" AppendDataBoundItems="True"
                                        DataSourceID="CountrySqlDataSource" 
                                        DataTextField="Country" DataValueField="Country" >
                        <asp:ListItem Selected="True" Value="" >(Show All)</asp:ListItem>
                      </asp:DropDownList>
                  </td>
                </tr>
                <tr>
                  <td>Last Name</td>
                  <td><asp:TextBox  id="LastNameTextBox" Text="*" /></td>
                </tr>
                <tr>
                  <td></td>
                  <td><asp:Button  id="FilterButton" Text="Filter Results" /></td>
                </tr>
              </table>
            </td>

            <td valign="top">                
              <asp:GridView ID="EmployeesGridView"
                DataSourceID="EmployeeDetailsSqlDataSource"
                AutoGenerateColumns="false"
                AllowSorting="true"
                DataKeyNames="EmployeeID"     
                Gridlines="Both"
                RunAt="server">

                <HeaderStyle backcolor="Navy"
                  forecolor="White"/>

                <RowStyle backcolor="White"/>

                <AlternatingRowStyle backcolor="LightGray"/>

                <EditRowStyle backcolor="LightCyan"/>

                <Columns>                  
                  <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" ReadOnly="true"/>                    
                  <asp:BoundField DataField="FirstName"  HeaderText="First Name"/>
                  <asp:BoundField DataField="LastName"   HeaderText="Last Name"/>                    
                  <asp:BoundField DataField="Country"    HeaderText="Country"/>                    
                </Columns>                 
              </asp:GridView>
            </td>                
          </tr>            
        </table>

        <asp:SqlDataSource ID="CountrySqlDataSource" 
          SelectCommand="SELECT DISTINCT Country FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
          RunAt="server" />

        <asp:SqlDataSource ID="EmployeeDetailsSqlDataSource" 
          SelectCommand="SELECT EmployeeID, LastName, FirstName, Country FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
          FilterExpression="Country LIKE '{0}' AND LastName LIKE '{1}'"
          RunAt="server">

          <FilterParameters>
            <asp:ControlParameter ControlID="CountryListBox"   PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="LastNameTextBox" PropertyName="Text" />
          </FilterParameters>
        </asp:SqlDataSource>
      </form>
  </body>
</html>

Siehe auch

Weitere Ressourcen

Datengebundene Webserversteuerelemente