Share via


DynamicRouteExpression Klasse

Definition

Ruft den Primärschlüssel aus den Routinginformationen zum Filtern von Daten ab.

public ref class DynamicRouteExpression : System::Web::UI::WebControls::Expressions::DataSourceExpression
public class DynamicRouteExpression : System.Web.UI.WebControls.Expressions.DataSourceExpression
type DynamicRouteExpression = class
    inherit DataSourceExpression
Public Class DynamicRouteExpression
Inherits DataSourceExpression
Vererbung
DynamicRouteExpression

Beispiele

Ein Visual Studio Projekt mit Quellcode ist verfügbar, um dieses Thema zu begleiten: Gerüst für dynamische Daten.

Das folgende Beispiel zeigt eine benutzerdefinierte List.aspx-Seitenvorlage für die Tabelle "Produkte". Es verwendet die ColumnName Eigenschaft, um den Fremdschlüssel "ProductCategory" für das Filtern der Zeilen "Produkte" anzugeben.

Auf der benutzerdefinierten Seite "List.aspx" wird eine Spalte angezeigt, die Links der Kategorien enthält, die von der Spalte "ProductCategory"-Fremdschlüssel enthalten sind. Wenn der Benutzer auf einen dieser Links klickt, zeigt die Seite "List.aspx" nur die Zeilen an, die die ausgewählte Kategorie enthalten.

Das Beispiel erfordert folgendes:

<%@ Page Language="C#" MasterPageFile="~/Site.master" CodeFile="List.aspx.cs" Inherits="List" %>

<%@ Register src="~/DynamicData/Content/GridViewPager.ascx" tagname="GridViewPager" tagprefix="asp" %>

<asp:Content ID="headContent" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true">
        <DataControls>
            <asp:DataControlReference ControlID="GridView1" />
        </DataControls>
    </asp:DynamicDataManager>

   
    <h2 class="DDSubHeader">Using DynamicRouteExpression with <%= table.DisplayName%> table</h2>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div class="DD">
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true"
                    HeaderText="List of validation errors" CssClass="DDValidator" />
                <asp:DynamicValidator runat="server" ID="GridViewValidator" ControlToValidate="GridView1" Display="None" CssClass="DDValidator" />
                <br /> <br />
          
                <div class="DDFilter"> 
                    <asp:HyperLink runat="server" ID="ViewAllLink" Text="View All Categories" />
                </div>
            
            </div>

            <asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource" EnablePersistedSelection="true"
                AllowPaging="True" AllowSorting="True" CssClass="DDGridView"
                RowStyle-CssClass="td" HeaderStyle-CssClass="th" CellPadding="6">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:DynamicHyperLink runat="server" Action="Edit" Text="Edit"
                            /> <asp:LinkButton runat="server" CommandName="Delete" Text="Delete"
                                OnClientClick='return confirm("Are you sure you want to delete this item?");'
                            /> <asp:DynamicHyperLink runat="server" Text="Details" />
                            <!-- Create action link to filter items that
                            belong to the same category -->
                             <a ID="CategoryRouteID" runat="server" 
                                    href='<%# GetRouteInformation() %>'>
                                Filter By: <%# GetProductCategory() %>
                            </a>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

                <PagerStyle CssClass="DDFooter"/>        
                <PagerTemplate>
                    <asp:GridViewPager runat="server" />
                </PagerTemplate>
                <EmptyDataTemplate>
                    There are currently no items in this table.
                </EmptyDataTemplate>
            </asp:GridView>

            <asp:LinqDataSource ID="GridDataSource" runat="server" EnableDelete="true" />
            
            <asp:QueryExtender TargetControlID="GridDataSource" ID="GridQueryExtender" runat="server">
                <asp:DynamicRouteExpression ColumnName="ProductCategory" />
            </asp:QueryExtender>

            <br />

            <div class="DDBottomHyperLink">
                <asp:DynamicHyperLink ID="InsertHyperLink" runat="server" Action="Insert"><img runat="server" src="~/DynamicData/Content/Images/plus.gif" alt="Insert new item" />Insert new item</asp:DynamicHyperLink>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>
<%@ Page Language="VB" MasterPageFile="~/Site.master" CodeFile="List.aspx.vb" Inherits="List" %>

<%@ Register src="~/DynamicData/Content/GridViewPager.ascx" tagname="GridViewPager" tagprefix="asp" %>

<asp:Content ID="headContent" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true">
        <DataControls>
            <asp:DataControlReference ControlID="GridView1" />
        </DataControls>
    </asp:DynamicDataManager>

    <h2 class="DDSubHeader"><%= table.DisplayName%></h2>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div class="DD">
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true"
                    HeaderText="List of validation errors" CssClass="DDValidator" />
                <asp:DynamicValidator runat="server" ID="GridViewValidator" ControlToValidate="GridView1" Display="None" CssClass="DDValidator" />
            </div>

            <asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource" EnablePersistedSelection="true"
                AllowPaging="True" AllowSorting="True" CssClass="DDGridView"
                RowStyle-CssClass="td" HeaderStyle-CssClass="th" CellPadding="6">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:DynamicHyperLink runat="server" Action="Edit" Text="Edit"
                            /> <asp:LinkButton runat="server" CommandName="Delete" Text="Delete"
                                OnClientClick='return confirm("Are you sure you want to delete this item?");'
                            /> <asp:DynamicHyperLink runat="server" Text="Details" />
                        
                            <!-- Create action link to filter items that
                            belong to the same category -->
                             <a ID="CategoryRouteID" runat="server" 
                                    href='<%# GetRouteInformation() %>'>
                                Filter By: <%# GetProductCategory() %>
                            </a>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

                <PagerStyle CssClass="DDFooter"/>        
                <PagerTemplate>
                    <asp:GridViewPager runat="server" />
                </PagerTemplate>
                <EmptyDataTemplate>
                    There are currently no items in this table.
                </EmptyDataTemplate>
            </asp:GridView>

            <asp:LinqDataSource ID="GridDataSource" runat="server" EnableDelete="true" />
            
            <!-- Set the foreign-key to use for filtering -->
            <asp:QueryExtender TargetControlID="GridDataSource" ID="GridQueryExtender" runat="server">
                <asp:DynamicRouteExpression ColumnName="ProductCategory" />
            </asp:QueryExtender>

            <br />

            <div class="DDBottomHyperLink">
                <asp:DynamicHyperLink ID="InsertHyperLink" runat="server" Action="Insert"><img runat="server" src="~/DynamicData/Content/Images/plus.gif" alt="Insert new item" />Insert new item</asp:DynamicHyperLink>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>
// Create route information based on the
// foreign-key specified in the 
// DynamicRouteExpression page markup. 
protected string GetRouteInformation()
{

    // Retrieve the current data item.
    var productItem = (Product)GetDataItem();

    if (productItem != null)
    {

        RouteValueDictionary rvd = new RouteValueDictionary();
        rvd.Add("ProductCategoryID", productItem.ProductCategoryID );

        string routePath =
            table.GetActionPath(PageAction.List, rvd);

        return routePath;
    }

    return string.Empty;
}

// Get the name of the foreign-key category. 
protected string GetProductCategory()
{
    // Retrieves the current data item.
    var productItem = (Product)GetDataItem();

    if (productItem != null)
    {
        return productItem.ProductCategory.Name;
    }
    return string.Empty;
}
' Create route information based on the
' foreign-key specified in the 
' DynamicRouteExpression page markup. 
Protected Function GetRouteInformation() As String

    ' Retrieve the current data item.
    Dim productItem = CType(GetDataItem(), Product)

    If productItem IsNot Nothing Then

        Dim rvd As New RouteValueDictionary()
        rvd.Add("ProductCategoryID", productItem.ProductCategoryID)

        Dim routePath As String = table.GetActionPath(PageAction.List, rvd)

        Return routePath

    End If

    Return String.Empty
End Function

' Get the name of the foreign-key category. 
Protected Function GetProductCategory() As String
    ' Retrieves the current data item.
    Dim productItem = CType(GetDataItem(), Product)

    If productItem IsNot Nothing Then
        Return productItem.ProductCategory.Name
    End If
    Return String.Empty
End Function

Hinweise

Die DynamicRouteExpression Klasse wird mit dem QueryExtender Steuerelement im Seitenmarkup verwendet. Die DynamicRouteExpression Klasse ruft den Primärschlüssel aus den Routinginformationen ab, die in einer Webanforderung enthalten sind. Das QueryExtender Steuerelement verwendet dann den Schlüssel in einer Where Klausel. Dadurch wird die Abfrage für die Datenquelle geändert, die dann Tabellenzeilen zurückgibt, die nach dem Schlüssel gefiltert werden.

Sie können auch Daten mithilfe eines Fremdschlüssels filtern, den Sie mithilfe der ColumnName Eigenschaft angeben.

Deklarative Syntax

<asp:DynamicRouteExpression  
  ColumnName="Name of the foreign key column"/>  

Konstruktoren

DynamicRouteExpression()

Initialisiert eine neue Instanz der DynamicRouteExpression-Klasse.

Eigenschaften

ColumnName

Ruft den Namen einer Spalte ab, die einen Fremdschlüssel enthält, mit dem die Datenquelle abgefragt wird, oder legt den Namen fest.

Context

Ruft die HttpContext-Instanz des Besitzersteuerelements ab.

(Geerbt von DataSourceExpression)
DataSource

Ruft das Datenquellenobjekt ab, das dem Besitzersteuerelement zugeordnet ist.

(Geerbt von DataSourceExpression)
IsTrackingViewState

Ruft einen Wert ab, der angibt, ob die Änderungen des Ansichtszustands durch ein Datenquellen-Ausdrucksobjekt verfolgt werden.

(Geerbt von DataSourceExpression)
Owner

Ruft das Besitzersteuerelement ab.

(Geerbt von DataSourceExpression)
ViewState

Ruft eine Instanz der StateBag-Klasse ab, die die aktuellen Informationen zum Ansichtszustand enthält.

(Geerbt von DataSourceExpression)

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetQueryable(IQueryable)

Ruft die Abfrage aus der Datenquelle ab.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
LoadViewState(Object)

Lädt den Zustand der beizubehaltenden Werte im DataSourceExpression-Objekt.

(Geerbt von DataSourceExpression)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
SaveViewState()

Speichert den aktuellen Ansichtszustand des DataSourceExpression-Objekts.

(Geerbt von DataSourceExpression)
SetContext(Control, HttpContext, IQueryableDataSource)

Legt den HTTP-Kontext des DynamicRouteExpression-Objekts fest.

SetDirty()

Markiert das DataSourceExpression-Objekt, sodass sein Zustand im Ansichtszustand gespeichert wird.

(Geerbt von DataSourceExpression)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
TrackViewState()

Verfolgt Änderungen des Ansichtszustands des DataSourceExpression-Objekts, sodass die Änderungen im StateBag-Objekt für das Datenquellen-Ausdrucksobjekt gespeichert werden können.

(Geerbt von DataSourceExpression)

Explizite Schnittstellenimplementierungen

IStateManager.IsTrackingViewState

Ruft bei der Implementierung durch eine Klasse einen Wert ab, der angibt, ob die Änderungen des Ansichtszustands durch ein Datenquellen-Ausdrucksobjekt verfolgt werden.

(Geerbt von DataSourceExpression)
IStateManager.LoadViewState(Object)

Bei einer Implementierung durch eine Klasse wird der zuvor gespeicherte Ansichtszustand des Datenquellen-Ausdrucksobjekts geladen.

(Geerbt von DataSourceExpression)
IStateManager.SaveViewState()

Speichert bei der Implementierung durch eine Klasse den aktuellen Ansichtszustand des DataSourceExpression-Objekts.

(Geerbt von DataSourceExpression)
IStateManager.TrackViewState()

Verfolgt bei der Implementierung durch eine Klasse die Änderungen des Ansichtszustands des DataSourceExpression-Objekts, sodass die Änderungen im StateBag-Objekt für das Datenquellen-Ausdrucksobjekt gespeichert werden können.

(Geerbt von DataSourceExpression)

Gilt für