方法 : 動的データで親 Table から値を使用してテーブルの行をフィルタします。

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

ASP.NET ダイナミック データできますを子テーブルの行を表示するページのマークアップを使用して、親テーブルでのユーザーを選択する外部キー値に基づいています。親の表でユーザーが値を選択に値が含まれて子テーブル行だけ表示されます。これにより、データベース クエリの詳細と、データ ソース コントロールの知識をしなくてもフィルタ処理するデータを実行できます。

次の図には手順 Dynamic Data 次テーブルの行のフィルタを実装するを示しています

動的データ子テーブルの行フィルタ要素

  1. QueryExtender QueryExtenderQueryExtender コントロールにその親データ バインディング コントロールは、ユーザーの選択されている外部キー合格します。

  2. 使用 QueryExtenderQueryExtenderQueryExtender してこの外部キーの値を情報のフィルタ クエリを作成します。渡しこの子データ ソース コントロールに情報をフィルタします。

  3. 子のデータ ソース コントロールはフィルタ クエリ情報をデータ ソース プロバイダを渡します。

  4. データ ソース プロバイダは、データベースにクエリを渡します。

  5. データベースのフィルタ選択されたテーブル行を返します。

  6. データ ソース プロバイダは、子のデータ ソース コントロールにこのデータを送り返します。

  7. このコントロールは、最後に表示するための子データ バインド コントロールをフィルタ処理されたテーブルの行を渡します。

親テーブルから値を使用してテーブルの行を抽出するには

  1. Visual Studio 2010 または Visual Web Developer 2010 Express、Dynamic Data Web サイト、内で作成するか、ASP.NET Web ページを開きます。 手順は、データ ソース コントロール データベースにアクセスして、テーブルを表示する関連、データ バインド コントロールが存在する前提にしています。 

  2. ページに QueryExtenderQueryExtenderQueryExtender コントロールを追加し、フィルタを適用する行を含むの子テーブルに関連付けられたデータ ソース コントロールの ID に、 TargetControlIDTargetControlIDTargetControlID プロパティを設定します。

    次の例が子テーブルと関連付けられたデータ ソース コントロールを指定した QueryExtenderQueryExtenderQueryExtender コントロールのマークアップに示します。

    <asp:QueryExtender ID="QueryExtenderID" 
        TargetControlID="ChildTableDataSource" runat="server"/>
    </asp:QueryExtender>
    
  3. ControlFilterExpression ControlFilterExpressionControlFilterExpression コントロールの子として、 QueryExtenderQueryExtenderQueryExtender オブジェクトを追加します。

    次の例のコントロールを ControlFilterExpressionControlFilterExpressionControlFilterExpression オブジェクトを追加するためのマークアップに示します。

    <asp:QueryExtender  
        TargetControlID="ChildTableDataSource"  
        runat="server">
        <asp:ControlFilterExpression   />
    </asp:QueryExtender>  
    
  4. 親の表に関連付けられているデータ バインディング コントロールには、ControlIDControlIDControlID オブジェクトの ControlFilterExpressionControlFilterExpressionControlFilterExpression プロパティを設定します。

  5. 列のフィルタに使用される親の表には、ColumnColumnColumn オブジェクトの ControlFilterExpressionControlFilterExpressionControlFilterExpression プロパティを設定します。この列は子テーブルに外部キーを表します。

    次の例をデータ バインディング コントロールと、外部キー親の表に関連付けられているを指す ControlFilterExpressionControlFilterExpressionControlFilterExpression オブジェクトのマークアップに示します。

    <asp:QueryExtender  
        TargetControlID="ChildTableDataSource"  
        runat="server">
        <asp:ControlFilterExpression
            ControlD="ParentGridView"
            Column="ProductCategory" />
    </asp:QueryExtender>
    

使用例

次例に示します子を抽出するテーブルの行、親テーブルから外部キー値を使用しています。使用して、AdventureWorksLT データベースからテーブル ProductCategories と Products テーブルの例を示します。これらのテーブルは、マスター/詳細リレーションシップがあります。例は、[商品] テーブルの行を ProductCategories テーブルにユーザーによって割り当てられている ProductCategory 値に基づいてフィルタされます。

<%@ Page Language="VB" AutoEventWireup="true" 
    CodeFile="TableRowsDataKeyFiltering.aspx.vb" 
    Inherits="Samples_TableRowsDataKeyFiltering" %>

<!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 runat="server">
    <title>Parent Foreign Key Table Row Filtering</title>
</head>
<body>
    <h3>Parent Foreign Key Table Row Filtering</h3>

    <form id="form1" runat="server">
    <div>
        <asp:DynamicDataManager  ID="DynamicDataManager1" runat="server">
            <DataControls>
                <asp:DataControlReference ControlID="GridView1" />
                <asp:DataControlReference ControlID="GridView2" />
            </DataControls>
        </asp:DynamicDataManager>

         <h4>Parent Table: <%=LinqDataSource2.GetTable().DisplayName%></h4>

            Select a category in the 
            <code><%=LinqDataSource2.GetTable().DisplayName%></code> 
            parent table to filter the rows in the 
            <code><%=LinqDataSource1.GetTable().DisplayName%></code> 
            child table. 

          <asp:GridView ID="GridView2" runat="server" 
                DataSourceID="LinqDataSource2" 
                AutoGenerateColumns="false"
                AutoGenerateSelectButton="true" 
                AllowPaging="True" AllowSorting="True">

                <Columns>
                    <asp:DynamicField DataField="Name" />
                </Columns>

            </asp:GridView>

            <aspX:LinqDataSource ID="LinqDataSource2" runat="server" 
                ContextTypeName="AdventureWorksLTDataContext"
                TableName="ProductCategories">
            </aspX:LinqDataSource>


        <hr />

        <h4>Child Table: <%=LinqDataSource1.GetTable().DisplayName%></h4>

        <asp:GridView ID="GridView1" runat="server"
            DataSourceID="LinqDataSource1" AutoGenerateColumns="false"
            AllowPaging="true" AllowSorting="true">

           <Columns>
                <asp:DynamicField DataField="Name" />
                <asp:DynamicField DataField="Color" />
                <asp:DynamicField DataField="ProductCategory" />
           </Columns>

        </asp:GridView>


         <aspX:QueryExtender ID="QueryExtender1" 
            TargetControlID="LinqDataSource1" runat="server">
            <asp:ControlFilterExpression 
                ControlID="GridView2" 
                Column="ProductCategory" />  
        </aspX:QueryExtender>

        <aspX:LinqDataSource ID="LinqDataSource1" runat="server" 
            TableName="Products" 
            ContextTypeName="AdventureWorksLTDataContext"/>

    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" 
    CodeFile="TableRowsDataKeyFiltering.aspx.cs" 
    Inherits="Samples_TableRowsDataKeyFiltering" %>

<!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 runat="server">
    <title>Parent Foreign Key Table Row Filtering</title>
</head>
<body>
    <h3>Parent Foreign Key Table Row Filtering</h3>

    <form id="form1" runat="server">
    <div>
        <asp:DynamicDataManager  ID="DynamicDataManager1" runat="server">
            <DataControls>
                <asp:DataControlReference ControlID="GridView1" />
                <asp:DataControlReference ControlID="GridView2" />
            </DataControls>
        </asp:DynamicDataManager>

         <h4>Parent Table: <%=LinqDataSource2.GetTable().DisplayName%></h4>

            Select a category in the 
            <code><%=LinqDataSource2.GetTable().DisplayName%></code> 
            parent table to filter the rows in the 
            <code><%=LinqDataSource1.GetTable().DisplayName%></code> 
            child table. 

          <asp:GridView ID="GridView2" runat="server" 
                DataSourceID="LinqDataSource2" 
                AutoGenerateColumns="false"
                AutoGenerateSelectButton="true" 
                AllowPaging="True" AllowSorting="True">

                <Columns>
                    <asp:DynamicField DataField="Name" />
                </Columns>

            </asp:GridView>

            <aspX:LinqDataSource ID="LinqDataSource2" runat="server" 
                ContextTypeName="AdventureWorksLTDataContext"
                TableName="ProductCategories">
            </aspX:LinqDataSource>


        <hr />

        <h4>Child Table: <%=LinqDataSource1.GetTable().DisplayName%></h4>

        <asp:GridView ID="GridView1" runat="server"
            DataSourceID="LinqDataSource1" AutoGenerateColumns="false"
            AllowPaging="true" AllowSorting="true">

           <Columns>
                <asp:DynamicField DataField="Name" />
                <asp:DynamicField DataField="Color" />
                <asp:DynamicField DataField="ProductCategory" />
           </Columns>

        </asp:GridView>


         <aspX:QueryExtender ID="QueryExtender1" 
            TargetControlID="LinqDataSource1" runat="server">
            <asp:ControlFilterExpression 
                ControlID="GridView2" 
                Column="ProductCategory" />  
        </aspX:QueryExtender>

        <aspX:LinqDataSource ID="LinqDataSource1" runat="server" 
            TableName="Products" 
            ContextTypeName="AdventureWorksLTDataContext"/>

    </div>
    </form>
</body>
</html>
                        Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.DynamicData
Imports System.Collections.Specialized


PartialPublicClass Samples_TableRowsDataKeyFiltering
    Inherits System.Web.UI.Page

    ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As EventArgs)
        Dim table As MetaTable = LinqDataSource2.GetTable()
        Title = table.DisplayName

        ' Set the primary key to a category         ' for which child values exist.Dim TouringBikes AsInteger = 7
        Dim values AsNew OrderedDictionary()
        values.Add("ProductCategoryID", TouringBikes)
        Dim keyNames AsString() = {"ProductCategoryID"}
        Dim key AsNew DataKey(values, keyNames)
        Dim tmpGrid As IPersistedSelector = _
        DirectCast(GridView2, IPersistedSelector)
        tmpGrid.DataKey = key

    EndSubEndClass
                        using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.DynamicData;
using System.Collections.Specialized;


publicpartialclass Samples_TableRowsDataKeyFiltering : System.Web.UI.Page
{

    protectedvoid Page_Load(object sender, EventArgs e)
    {
        MetaTable table = LinqDataSource2.GetTable();
        Title = table.DisplayName;

        // Set the primary key to a category // for which child values exist.int TouringBikes = 7;
        OrderedDictionary values = new OrderedDictionary();
        values.Add("ProductCategoryID", TouringBikes);
        string[] keyNames = { "ProductCategoryID" };
        DataKey key = new DataKey(values, keyNames);
        ((IPersistedSelector)GridView2).DataKey = key;
    }
}

コードのコンパイル方法

この例には、次が必要です。

参照

処理手順

方法 : 動的データでユーザー設定の [列] を使用してデータをフィルタします。

方法 : 動的データで自動列を使用してデータをフィルタします。

参照

QueryExtender Web サーバー コントロール宣言の構文