DynamicFilter 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
显示用于使用指定列筛选表行的 UI。
public ref class DynamicFilter : System::Web::UI::Control
public ref class DynamicFilter : System::Web::UI::Control, System::Web::DynamicData::IFilterExpressionProvider
public class DynamicFilter : System.Web.UI.Control
public class DynamicFilter : System.Web.UI.Control, System.Web.DynamicData.IFilterExpressionProvider
type DynamicFilter = class
inherit Control
type DynamicFilter = class
inherit Control
interface IFilterExpressionProvider
Public Class DynamicFilter
Inherits Control
Public Class DynamicFilter
Inherits Control
Implements IFilterExpressionProvider
- 继承
- 实现
示例
可在以下位置获取包含源代码的 Visual Studio 项目: 下载。
以下示例使用默认的 ForeignKey.ascx 筛选器模板创建 UI,用于按 ProductCategory 外键列筛选 Products 表行。 当用户选择 ProductCategory 值时,仅显示包含该值的行。
该示例需要以下内容:
- 动态数据网站或动态数据 Web 应用程序。 这使你可以为数据库创建
AdventureWorksLTDataContext
数据上下文,并为表创建要访问的类。 有关详细信息,请参阅Walkthrough: Creating a New Dynamic Data Web Site using Scaffolding
。
<%@ Page Language="C#" MasterPageFile="~/Site.master"
CodeFile="DynamicFilter.aspx.cs" Inherits="ForeignKeyFilter" %>
<%@ 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" />
<h2 class="DDSubHeader"><%= table.DisplayName%> ForeignKey filter</h2>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
EnableClientScript="true"
HeaderText="List of validation errors" />
<asp:DynamicValidator runat="server" ID="GridViewValidator"
ControlToValidate="GridView1" Display="None" />
<!-- Show that the filter selection
is retained after a post-back -->
<asp:Button ID="Button1" runat="server" Text="Cause Postback" />
<span></span>The filter selection is retained after a postback.</span>
<br />
<!-- Set the DynamicFilter control attributes. -->
Select Category: <asp:DynamicFilter runat="server" ID="CategoryFilter"
DataField="ProductCategory" FilterUIHint="ForeignKey"
OnFilterChanged="OnFilterSelectedIndexChanged" /><br />
<!-- Data-bound control that shows the filtered table rows. -->
<asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource"
EnablePersistedSelection="true" PageSize="5"
AllowPaging="True" AllowSorting="True" CssClass="DDGridView">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="DeleteLinkButton" runat="server" CommandName="Delete"
CausesValidation="true" Text="Delete"
OnClientClick='return confirm("Are you sure you want to delete this item?");'
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle CssClass="footer"/>
<PagerTemplate>
<asp:GridViewPager runat="server" />
</PagerTemplate>
<EmptyDataTemplate>
There are currently no items in this table.
</EmptyDataTemplate>
</asp:GridView>
<!-- The provider that connects to the database -->
<asp:LinqDataSource ID="GridDataSource" runat="server"
EnableDelete="true"
ContextTypeName="AdventureWorksLTDataContext"
TableName="Products">
</asp:LinqDataSource>
<!-- The control that handles the details for querying
the database, after a user's filtering action -->
<asp:QueryExtender ID="QueryBlock1" TargetControlID="GridDataSource"
runat="server">
<asp:DynamicFilterExpression ControlID="CategoryFilter" />
</asp:QueryExtender>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
<%@ Page Language="VB" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="DynamicFilter.aspx.vb"
Inherits="ForeignKeyFilter" %>
<%@ 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" />
<h2 class="DDSubHeader"><%= table.DisplayName%> ForeignKey filter</h2>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
EnableClientScript="true"
HeaderText="List of validation errors" />
<asp:DynamicValidator runat="server" ID="GridViewValidator"
ControlToValidate="GridView1" Display="None" />
<!-- Show that the filter selection
is retained after a post-back -->
<asp:Button ID="Button1" runat="server" Text="Cause Postback" />
<span></span>The filter selection is retained after a postback.</span>
<br />
<!-- Set the DynamicFilter control attributes. -->
Select Category: <asp:DynamicFilter runat="server" ID="CategoryFilter"
DataField="ProductCategory" FilterUIHint="ForeignKey"
OnFilterChanged="OnFilterSelectedIndexChanged" /><br />
<!-- Data-bound control that shows the filtered table rows. -->
<asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource"
EnablePersistedSelection="true" PageSize="5"
AllowPaging="True" AllowSorting="True" CssClass="DDGridView">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="DeleteLinkButton" runat="server" CommandName="Delete"
CausesValidation="true" Text="Delete"
OnClientClick='return confirm("Are you sure you want to delete this item?");'
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle CssClass="footer"/>
<PagerTemplate>
<asp:GridViewPager ID="GridViewPager1" runat="server" />
</PagerTemplate>
<EmptyDataTemplate>
There are currently no items in this table.
</EmptyDataTemplate>
</asp:GridView>
<!-- The provider that connects to the database -->
<asp:LinqDataSource ID="GridDataSource" runat="server"
EnableDelete="true"
ContextTypeName="AdventureWorksLTDataContext"
TableName="Products">
</asp:LinqDataSource>
<!-- The control that handles the details for querying
the database, after a user's filtering action -->
<asp:QueryExtender ID="QueryBlock1" TargetControlID="GridDataSource"
runat="server">
<asp:DynamicFilterExpression ControlID="CategoryFilter" />
</asp:QueryExtender>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using System.Web.DynamicData;
public partial class ForeignKeyFilter : System.Web.UI.Page {
protected MetaTable table;
protected void Page_Init(object sender, EventArgs e) {
DynamicDataManager1.RegisterControl(GridView1,
true /* setSelectionFromUrl */);
}
protected void Page_Load(object sender, EventArgs e) {
table = GridDataSource.GetTable();
Title = table.DisplayName;
// Disable various options if the table is readonly
if (table.IsReadOnly) {
GridView1.Columns[0].Visible = false;
}
}
// Handle the filter change event.
protected void OnFilterSelectedIndexChanged(object sender, EventArgs e) {
// Reset the index of the page to display after
// the data filter value has been changed.
GridView1.PageIndex = 0;
}
}
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.Xml.Linq
Imports System.Web.DynamicData
Partial Public Class ForeignKeyFilter
Inherits System.Web.UI.Page
Protected table As MetaTable
Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
'setSelectionFromUrl
DynamicDataManager1.RegisterControl(GridView1, True)
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
table = GridDataSource.GetTable()
Title = table.DisplayName
' Disable various options if the table is readonly
If table.IsReadOnly Then
GridView1.Columns(0).Visible = False
End If
End Sub
' Handle the filter change event.
Protected Sub OnFilterSelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
' Reset the index of the page to display after
' the data filter value has been changed.
GridView1.PageIndex = 0
End Sub
End Class
注解
本主题内容:
介绍
控件 DynamicFilter 用于在页面标记中生成用于筛选表行的 UI。 动态数据使用 ~\DynamicData\Filters 文件夹中的默认筛选器模板创建 UI。 这些模板支持外键、布尔和枚举列类型。
下表显示了可以执行的一些任务。
方案 | 说明 |
---|---|
指定用于表行筛选的列。 | 使用 属性 DataField 指定要用于表行筛选的列。 |
指定用于创建 UI 的筛选器模板的名称。 | 使用 属性 FilterUIHint 指定要用于创建 UI 的筛选器模板的名称。 |
在呈现 UI 之前执行自定义操作。 | 使用 在 FilterChanged 呈现 UI 之前执行自定义操作。 |
可以通过以下方式指定要使用的筛选器模板:
通过在页面标记中使用 FilterUIHint 属性。 此方法是一种表示层自定义,它独立于数据库) (架构,适用于单个页面。
通过在模型中使用 FilterUIHintAttribute 特性。 此方法是一种数据层自定义,它依赖于数据库) (特定架构,适用于整个应用程序。
如果使用这两种方法,则标记中指定的筛选器模板优先于数据模型中指定的模板。
类上下文
控件 DynamicFilter 旨在与 控件配合使用 QueryExtender 。 控件 DynamicFilter 由 DynamicFilterExpression 页面标记中的 对象内的 QueryExtender 实例引用。
下图显示了动态数据为通过外键列实现表行筛选所遵循的步骤。
控件 DynamicFilter 将所选值传递给 控件 QueryExtender 。
控件 QueryExtender 使用 值创建查询筛选信息。 然后,它将此信息传递给数据源控件。
数据源控件将筛选查询信息传递给数据源提供程序。
数据源提供程序将查询传递到数据库。
数据库返回筛选的表行。
数据源提供程序将此数据发送回数据源控件。
数据源控件将筛选的表行传递给数据绑定控件以供显示。
声明性语法
<asp:DynamicFilter
ID="Control ID"
DataField="Name of the data field to use for filtering"
EnableViewState="True|False"
FilterUIHint="Name of the filter template to generate the UI"
OnFilterChanged="Filter changed event handler"
OnDataBinding="DataBinding event handler"
OnDisposed="Disposed event handler"
OnInit="Init event handler"
OnLoad="Load event handler"
OnPreRender="PreRender event handler"
OnUnload="Unload event handler"
Visible="True|False"
runat="server"/>
构造函数
DynamicFilter() |
初始化 DynamicFilter 类的新实例。 |
属性
Adapter |
获取控件的浏览器特定适配器。 (继承自 Control) |
AppRelativeTemplateSourceDirectory |
获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。 (继承自 Control) |
BindingContainer |
获取包含该控件的数据绑定的控件。 (继承自 Control) |
ChildControlsCreated |
获取一个值,该值指示是否已创建服务器控件的子控件。 (继承自 Control) |
ClientID |
获取由 ASP.NET 生成的 HTML 标记的控件 ID。 (继承自 Control) |
ClientIDMode |
获取或设置用于生成 ClientID 属性值的算法。 (继承自 Control) |
ClientIDSeparator |
获取一个字符值,该值表示 ClientID 属性中使用的分隔符字符。 (继承自 Control) |
Column |
获取或设置要用于筛选的表列。 |
Context |
为当前 Web 请求获取与服务器控件关联的 HttpContext 对象。 (继承自 Control) |
Controls |
获取 ControlCollection 对象,该对象表示 UI 层次结构中的指定服务器控件的子控件。 (继承自 Control) |
DataField |
获取或设置要用于表行筛选的列的名称。 |
DataItemContainer |
如果命名容器实现 IDataItemContainer,则获取对命名容器的引用。 (继承自 Control) |
DataKeysContainer |
如果命名容器实现 IDataKeysControl,则获取对命名容器的引用。 (继承自 Control) |
DesignMode |
获取一个值,该值指示是否正在使用设计图面上的一个控件。 (继承自 Control) |
EnableTheming |
获取或设置一个值,该值指示主题是否应用于该控件。 (继承自 Control) |
EnableViewState |
获取或设置一个值,该值指示服务器控件是否向发出请求的客户端保持自己的视图状态以及它所包含的任何子控件的视图状态。 (继承自 Control) |
Events |
获取控件的事件处理程序委托列表。 此属性为只读。 (继承自 Control) |
FilterTemplate |
获取与此控件的当前实例关联的筛选器模板。 |
FilterUIHint |
获取或设置用于创建 UI 的筛选器模板的名称。 |
HasChildViewState |
获取一个值,该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。 (继承自 Control) |
ID |
获取或设置分配给服务器控件的编程标识符。 (继承自 Control) |
IdSeparator |
获取用于分隔控件标识符的字符。 (继承自 Control) |
IsChildControlStateCleared |
获取一个值,该值指示该控件中包含的控件是否具有控件状态。 (继承自 Control) |
IsTrackingViewState |
获取一个值,用于指示服务器控件是否会将更改保存到其视图状态中。 (继承自 Control) |
IsViewStateEnabled |
获取一个值,该值指示是否为该控件启用了视图状态。 (继承自 Control) |
LoadViewStateByID |
获取一个值,该值指示控件是否通过 ID 而不是索引参与加载其视图状态。 (继承自 Control) |
NamingContainer |
获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 ID 属性值的服务器控件。 (继承自 Control) |
Page |
获取对包含服务器控件的 Page 实例的引用。 (继承自 Control) |
Parent |
获取对页 UI 层次结构中服务器控件的父控件的引用。 (继承自 Control) |
RenderingCompatibility |
获取一个值,该值指定呈现的 HTML 将与之兼容的 ASP.NET 版本。 (继承自 Control) |
Site |
获取容器信息,该容器在呈现于设计图面上时承载当前控件。 (继承自 Control) |
SkinID |
获取或设置要应用于控件的外观。 (继承自 Control) |
TemplateControl |
获取或设置对包含该控件的模板的引用。 (继承自 Control) |
TemplateSourceDirectory |
获取包含当前服务器控件的 Page 或 UserControl 的虚拟目录。 (继承自 Control) |
UniqueID |
获取服务器控件的唯一的、以分层形式限定的标识符。 (继承自 Control) |
ValidateRequestMode |
获取或设置指示控件是否检查来自浏览器的客户端输入是否具有潜在危险值的值。 (继承自 Control) |
ViewState |
获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态。 (继承自 Control) |
ViewStateIgnoresCase |
获取一个值,该值指示 StateBag 对象是否不区分大小写。 (继承自 Control) |
ViewStateMode |
获取或设置此控件的视图状态模式。 (继承自 Control) |
Visible |
获取或设置一个值,该值指示服务器控件是否作为 UI 呈现在页上。 (继承自 Control) |
方法
事件
DataBinding |
当服务器控件绑定到数据源时发生。 (继承自 Control) |
Disposed |
当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段。 (继承自 Control) |
FilterChanged |
在用户为外键选择值时发生。 |
Init |
当服务器控件初始化时发生;初始化是控件生存期的第一步。 (继承自 Control) |
Load |
当服务器控件加载到 Page 对象中时发生。 (继承自 Control) |
PreRender |
在加载 Control 对象之后、呈现之前发生。 (继承自 Control) |
Unload |
当服务器控件从内存中卸载时发生。 (继承自 Control) |
显式接口实现
扩展方法
FindDataSourceControl(Control) |
返回与指定控件的数据控件关联的数据源。 |
FindFieldTemplate(Control, String) |
返回指定控件的命名容器中指定列的字段模板。 |
FindMetaTable(Control) |
返回包含数据控件的元表对象。 |