Partager via


DynamicRouteExpression Classe

Définition

Obtient la clé primaire à partir des informations de routage pour effectuer le filtrage des données.

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
Héritage
DynamicRouteExpression

Exemples

Un projet Visual Studio avec du code source est disponible pour accompagner cette rubrique : génération automatique de données dynamiques.

L’exemple suivant montre un modèle de page List.aspx personnalisé pour la table Products. Elle utilise la ColumnName propriété pour spécifier la clé étrangère ProductCategory pour filtrer les lignes Products.

La page List.aspx personnalisée affiche une colonne qui contient des liens des catégories contenues dans la colonne Clé étrangère ProductCategory. Lorsque l’utilisateur clique sur l’un de ces liens, la page List.aspx affiche uniquement les lignes qui contiennent la catégorie sélectionnée.

L’exemple nécessite les éléments suivants :

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

Remarques

La DynamicRouteExpression classe est utilisée avec le contrôle dans le QueryExtender balisage de page. La DynamicRouteExpression classe obtient la clé primaire à partir des informations de routage contenues dans une requête Web. Le QueryExtender contrôle utilise ensuite la clé dans une Where clause. Cela modifie la requête de la source de données, qui retourne ensuite les lignes de table filtrées par la clé.

Vous pouvez également filtrer les données à l’aide d’une clé étrangère que vous spécifiez à l’aide de la ColumnName propriété.

Syntaxe déclarative

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

Constructeurs

DynamicRouteExpression()

Initialise une nouvelle instance de la classe DynamicRouteExpression.

Propriétés

ColumnName

Obtient ou définit le nom d'une colonne qui contient une clé étrangère utilisée pour interroger la source de données.

Context

Obtient l'instance HttpContext du contrôle propriétaire.

(Hérité de DataSourceExpression)
DataSource

Obtient l'objet source de données associé au contrôle propriétaire.

(Hérité de DataSourceExpression)
IsTrackingViewState

Obtient une valeur qui indique si un objet expression de source de données effectue le suivi des modifications apportées à son état d'affichage.

(Hérité de DataSourceExpression)
Owner

Obtient le contrôle propriétaire.

(Hérité de DataSourceExpression)
ViewState

Obtient une instance de la classe StateBag qui contient les informations sur l'état d'affichage actuel.

(Hérité de DataSourceExpression)

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetQueryable(IQueryable)

Obtient la requête de la source de données.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
LoadViewState(Object)

Charge l'état des valeurs de l'objet DataSourceExpression qui doivent être persistantes.

(Hérité de DataSourceExpression)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
SaveViewState()

Enregistre l'état d'affichage actuel de l'objet DataSourceExpression.

(Hérité de DataSourceExpression)
SetContext(Control, HttpContext, IQueryableDataSource)

Définit le contexte HTTP de l'objet DynamicRouteExpression.

SetDirty()

Marque l'objet DataSourceExpression afin que son état soit enregistré dans l'état d'affichage.

(Hérité de DataSourceExpression)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
TrackViewState()

Suit les modifications apportées à l'état d'affichage de l'objet DataSourceExpression afin que les modifications puissent être stockées dans l'objet StateBag pour l'objet expression de source de données.

(Hérité de DataSourceExpression)

Implémentations d’interfaces explicites

IStateManager.IsTrackingViewState

En cas d'implémentation par une classe, obtient une valeur qui indique si un objet expression de source de données effectue le suivi des modifications de son état d'affichage.

(Hérité de DataSourceExpression)
IStateManager.LoadViewState(Object)

En cas d'implémentation par une classe, charge l'état d'affichage précédemment enregistré de l'objet expression de source de données.

(Hérité de DataSourceExpression)
IStateManager.SaveViewState()

En cas d'implémentation par une classe, enregistre l'état d'affichage actuel de l'objet DataSourceExpression.

(Hérité de DataSourceExpression)
IStateManager.TrackViewState()

En cas d'implémentation par une classe, suit les modifications apportées à l'état d'affichage de l'objet DataSourceExpression afin que les modifications puissent être stockées dans l'objet StateBag pour l'objet expression de source de données.

(Hérité de DataSourceExpression)

S’applique à