방법: Dynamic Data에서 테이블 작업 링크 만들기

ASP.NET Dynamic Data를 사용하면 Dynamic Data에서 활성화된 테이블 작업을 기반으로 동적 하이퍼링크를 만들 수 있습니다. 사용자가 링크를 클릭하면 세부 데이터 행 열거, 데이터 항목 편집 등 링크에 지정된 작업을 수행할 수 있는 페이지가 표시됩니다.

이 항목에서는 다음 시나리오에서 DynamicHyperLink 컨트롤을 사용하여 Dynamic Data 동적 하이퍼링크를 만드는 방법을 보여 줍니다.

  • 데이터 바인딩된 컨트롤에 대한 테이블 행 작업 링크입니다. 이러한 링크는 "편집" 또는 "세부 정보"와 같이 데이터 바인딩된 컨트롤의 데이터 행과 관련된 작업 링크입니다. Dynamic Data는 행 자체에서 테이블과 기본 키를 유추합니다.

  • 데이터 바인딩된 컨트롤에 대한 메타 테이블 작업 링크입니다. 이러한 링크는 "목록" 또는 "삽입"과 같이 데이터 바인딩된 컨트롤의 테이블과 관련된 MetaTable 작업 링크입니다.

  • 바인딩되지 않은 작업 링크입니다. 이러한 링크는 데이터 바인딩된 컨트롤과 관련이 없는 작업 링크입니다. 이러한 링크의 경우에는 액세스할 테이블과 수행할 작업을 정의해야 합니다.

데이터 바인딩된 컨트롤의 테이블 행 작업 링크를 만들려면

  1. Visual Studio 2010 또는 Visual Web Developer 2010 Express에서 Dynamic Data 웹 사이트를 만들거나 엽니다.

  2. ASP.NET 웹 페이지를 만들거나 엽니다.

  3. 다음 예제와 같이 DynamicDataManager 컨트롤을 페이지에 추가합니다.

    <body>
      <form ID="Form1" runat="server">
        <asp:DynamicDataManager ID="DynamicDataManager1"
          runat="server"/>
      </form>
    </body>
    

    Dynamic Data 컨트롤을 지원하려면 DynamicDataManager 컨트롤이 페이지 내에 있어야 합니다. DynamicDataManager 컨트롤의 태그는 Dynamic Data를 사용하는 컨트롤의 태그 앞에 와야 합니다.

  4. 데이터 소스 컨트롤을 페이지에 추가한 후 작업 링크를 만들 데이터 테이블에 액세스할 수 있도록 컨트롤을 구성합니다.

    다음 예제에서는 AdventureWorksLT 데이터베이스의 Products 테이블에 액세스하도록 구성된 LinqDataSource 컨트롤의 태그를 보여 줍니다.

    <asp:LinqDataSource ID="LinqDataSource1"  runat="server"  
      ContextTypeName="AdventureWorksLTDataContext"
      TableName="Products"/>
    
  5. 템플릿을 지원하는 데이터 바인딩된 컨트롤을 추가합니다.

    다음 예제에서는 LinqDataSource 컨트롤의 데이터를 표시하도록 구성된 GridView 컨트롤의 태그를 보여 줍니다.

    <asp:GridView ID="GridView1" DataSourceID=" LinqDataSource1" runat="server">
    </asp:GridView>
    
  6. DynamicHyperLink 컨트롤을 데이터 바인딩된 컨트롤의 TemplateField 템플릿에 추가합니다.

    다음 예제에서는 연결된 테이블의 각 행에 대한 편집 링크를 만드는 태그를 보여 줍니다.

    <asp:GridView ID="GridView1" DataSourceID="LinqDataSource1" 
        runat="server">
      
      <Columns>
        <asp:TemplateField>
          <ItemTemplate>
            <asp:DynamicHyperLink runat="server" 
              ID="EditHyperLink" 
              Action="Edit" 
              Text="Edit"/>
          </ItemTemplate>
        </asp:TemplateField>
      </Columns>
      
    </asp:GridView>
    

    사용자가 편집 링크를 클릭하면 관련 행을 편집할 수 있도록 Edit.aspx 기본 페이지 템플릿을 사용하여 UI를 렌더링하는 페이지가 표시됩니다.

  7. 다음 예제와 같이 데이터 바인딩된 컨트롤을 DynamicDataManager 컨트롤에 등록합니다.

    <asp:DynamicDataManager ID="DynamicDataManager1"
      runat="server">
      <DataControls>
        <asp:DataControlReference ControlID="GridView1"/>
      <DataControls>
    </asp:DynamicDataManager>
    

    DynamicDataManager 컨트롤은 등록된 데이터 바인딩된 컨트롤을 동적 컨트롤로 처리하도록 Dynamic Data에 지시합니다.

  8. 페이지를 저장한 다음 닫습니다.

데이터 바인딩된 컨트롤의 메타 테이블 작업 링크를 만들려면

  1. Visual Studio 2010 또는 Visual Web Developer 2010 Express에서 Dynamic Data 웹 사이트를 만들거나 엽니다.

  2. ASP.NET 웹 페이지를 만들거나 엽니다. 페이지에 관련 코드 숨김 클래스 파일이 있는지 확인합니다.

  3. 다음 예제와 같이 DynamicDataManager 컨트롤을 페이지에 추가합니다.

    <body>
      <form ID="Form1" runat="server">
        <asp:DynamicDataManager ID="DynamicDataManager1"
          runat="server"/>
      </form>
    </body>
    

    Dynamic Data 컨트롤을 지원하려면 DynamicDataManager 컨트롤이 페이지 내에 있어야 합니다. DynamicDataManager 컨트롤의 태그는 Dynamic Data를 사용하는 컨트롤의 태그 앞에 와야 합니다.

  4. 데이터 소스 컨트롤을 페이지에 추가한 후 연결할 데이터베이스 테이블이 포함된 컬렉션에 액세스할 수 있도록 컨트롤을 구성합니다.

    다음 예제에서는 AdventureWorksLT 데이터베이스에 포함된 테이블에 액세스하도록 구성된 LinqDataSource 컨트롤의 태그를 보여 줍니다.

    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
      ContextTypeName="AdventureWorksLTDataContext">
    </asp:LinqDataSource>
    
  5. 템플릿을 지원하는 데이터 바인딩된 컨트롤을 추가합니다.

    다음 예제에서는 LinqDataSource1이라는 LinqDataSource 컨트롤의 데이터를 표시하도록 구성된 GridView 컨트롤의 태그를 보여 줍니다.

    <asp:GridView ID="GridView1" DataSourceID="LinqDataSource1" runat="server">
    </asp:GridView>
    
  6. DynamicHyperLink 컨트롤을 데이터 바인딩된 컨트롤의 TemplateField 템플릿에 추가합니다.

    다음 예제에서는 컬렉션의 각 테이블에 대한 링크를 만드는 태그를 보여 줍니다.

    <asp:GridView ID="GridView1" DataSourceID="LinqDataSource1" runat="server"/> 
      <Columns>
        <asp:TemplateField HeaderText="Table Name" >
          <ItemTemplate>
            <asp:DynamicHyperLink ID="DynamicHyperLink1" 
                runat="server"
                TableName='<%# Eval("Name") %>'>
              <%# Eval("DisplayName") %> 
            </asp:DynamicHyperLink>
          </ItemTemplate>
        </asp:TemplateField>
      </Columns> 
    </asp:GridView>
    
  7. 다음 예제와 같이 데이터 바인딩된 컨트롤을 DynamicDataManager 컨트롤에 등록합니다.

    <asp:DynamicDataManager ID="DynamicDataManager1"
      runat="server">
      <DataControls>
        <asp:DataControlReference ControlID="GridView1"/>
      <DataControls>
    </asp:DynamicDataManager>
    

    DynamicDataManager 컨트롤은 등록된 데이터 바인딩된 컨트롤을 동적 컨트롤로 처리하도록 Dynamic Data에 지시합니다.

  8. 페이지를 저장한 다음 닫습니다.

  9. 코드 숨김 클래스 파일을 엽니다.

  10. Page_Load 메서드에서 데이터 바인딩된 컨트롤을 Dynamic Data에서 사용할 수 있는 테이블의 IList 컬렉션에 바인딩합니다.

    다음 예제에서는 GridView1 컨트롤을 테이블의 IList 컬렉션에 추가하는 방법을 보여 줍니다.

    protected void Page_Load(object sender, EventArgs e)
    {
        If (!IsPostBack)
        {
          // Get the list of visible tables.
          System.Collections.IList tables =
              ASP.global_asax.model.VisibleTables;
          // Throw an exception if there are no visible tables.
          if (tables.Count == 0){ 
            throw new InvalidOperationException();
          }
          // Bind the data-bound control to 
          // the list of tables.
          GridView1.DataSource = tables;
          GridView1.DataBind();
        }
    }
    

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As EventArgs)
        If Not IsPostBack Then
          ' Get the list of visible tables.
          Dim tables As System.Collections.IList = _
            ASP.global_asax.L2Smodel.VisibleTables
          ' Throw an exception if there are no visible tables.
          If tables.Count = 0 Then
            Throw New InvalidOperationException()
          End If
          ' Bind the data-bound control to 
          ' the list of tables.
          GridView1.DataSource = tables
          GridView1.DataBind()
        End If
    End Sub
    
  11. 코드 숨김 파일을 저장한 다음 닫습니다.

바인딩되지 않은 작업 링크를 만들려면

  1. Visual Studio 2010 또는 Visual Web Developer 2010 Express에서 Dynamic Data 웹 사이트를 만들거나 엽니다.

  2. ASP.NET 웹 페이지를 만들거나 엽니다.

  3. 데이터 소스 컨트롤을 페이지에 추가한 후 작업할 데이터 테이블에 액세스할 수 있도록 컨트롤을 구성합니다.

    다음 예제에서는 AdventureWorksLT 데이터베이스에 포함된 테이블에 액세스하는 LinqDataSource 컨트롤의 태그를 보여 줍니다.

    <asp:LinqDataSource ID="LinqDataSource1"  runat="server"  
      ContextTypeName="AdventureWorksLTDataContext">
    </asp:LinqDataSource>
    
  4. 페이지에 DynamicHyperLink 컨트롤을 추가한 다음 바인딩되지 않은 링크로 구성합니다.

    바인딩되지 않은 링크는 데이터 바인딩된 컨트롤에 속하지 않은 작업 링크입니다. 이러한 링크의 경우에는 액세스할 테이블과 수행할 작업을 정의해야 합니다.

    <asp:DynamicHyperLink ID="DynamicHyperLink1">
        Insert new item
    </asp:DynamicHyperLink>
    
  5. DynamicHyperLink 컨트롤의 Action 속성을 수행하려는 작업으로 설정합니다.

    다음 예제에서는 Action 속성을 Insert로 설정하는 방법을 보여 줍니다.

    <asp:DynamicHyperLink ID="DynamicHyperLink1" 
        Action="Insert">
      Insert new item
    </asp:DynamicHyperLink>
    
  6. DynamicHyperLink 컨트롤의 TableName 속성을 작업 대상 테이블의 이름으로 설정합니다.

    다음 예제에서는 TableName 속성을 Products로 설정하는 방법을 보여 줍니다.

    <asp:DynamicHyperLink ID="DynamicHyperLink1" 
        Action="Insert" TableName= "Products">
      Insert new item
    </asp:DynamicHyperLink>
    

    사용자가 삽입 링크를 클릭하면 새 항목을 삽입할 수 있도록 Insert.aspx 페이지 템플릿을 사용하여 UI를 렌더링하는 페이지가 표시됩니다.

다음 예제에서는 이러한 시나리오에 대한 동적 하이퍼링크를 만듭니다.

  • 데이터 바인딩된 컨트롤에 대한 테이블 행 작업 링크입니다. 이 예제에서는 Products 테이블의 각 데이터 행에 대한 편집 링크를 만듭니다. 사용자가 편집 링크를 클릭하면 관련 행을 편집할 수 있도록 Edit.aspx 페이지 템플릿을 사용하여 UI를 렌더링하는 페이지가 표시됩니다.

  • 데이터 바인딩된 컨트롤에 대한 메타 테이블 작업 링크입니다. 이 예제에서는 AdventureWorksLT 샘플 데이터베이스에 포함된 테이블의 컬렉션을 표시하는 링크를 만듭니다. 사용자가 링크를 클릭하면 Dynamic Data가 List.aspx 페이지 템플릿을 사용하여 관련 테이블을 표시하는 UI를 렌더링합니다.

  • 바인딩되지 않은 작업 링크입니다. 이 예제에서는 데이터 바인딩된 컨트롤에 속하지 않은 Products 테이블에 대해 편집삽입 링크를 만들고 액세스할 테이블과 수행할 작업을 지정합니다. 편집 링크의 경우 수정할 행의 기본 키도 지정합니다.


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

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Dynamic Hyperlinks</title>
</head>
<body>
    <form id="form1" runat="server">

    <asp:DynamicDataManager  ID="DynamicDataManager1" 
        runat="server">
        <DataControls>
            <asp:DataControlReference ControlID="GridView1" />
        </DataControls>
    </asp:DynamicDataManager>

    <div>
        <h3>Dynamic Hyperlinks</h3>

         <h4>UnBound Control Action Links</h4>

        <asp:DynamicHyperLink ID="InsertHyperLink" runat="server" 
            Action="Insert"   
            ContextTypeName="AdventureWorksLTDataContext"
            TableName="ProductModels">Insert new item
        </asp:DynamicHyperLink>

        <br />

        <asp:DynamicHyperLink ID="DynamicHyperLink2" runat="server" 
            Action="Edit" 
            ContextTypeName="AdventureWorksLTDataContext"
            TableName="ProductModels"  
            ProductModelID="1">Edit item</asp:DynamicHyperLink>

        <h4>Data-Bound Control Meta-Table Action Links</h4>

        <asp:GridView ID="GridView2" runat="server" 
            AutoGenerateColumns="false"
            CellPadding="6">
            <Columns>
               <asp:TemplateField HeaderText="Table Name" 
                    SortExpression="TableName">
                    <ItemTemplate>                   
                        <asp:DynamicHyperLink 
                            ID="DynamicHyperLink1" runat="server">
                            <%# Eval("DisplayName") %>
                        </asp:DynamicHyperLink>
                    </ItemTemplate>
                </asp:TemplateField>    
            </Columns>
        </asp:GridView>


        <h4>Data-Bound Control Table Row Action Links</h4>

        <asp:GridView ID="GridView1" runat="server" 
            AllowPaging="true" PageSize="5"
            DataSourceID="LinqDataSource1">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:DynamicHyperLink ID="EditHyperLink" 
                            runat="server"  
                            Action="Edit" Text="Edit" />       
                    </ItemTemplate> 
                </asp:TemplateField>    
            </Columns>
        </asp:GridView>



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

    </div>
    </form>
</body>
</html>



<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DynamicDataDynamicHyperlink.aspx.cs" Inherits="DocSamples_DynamicDataDynamicHyperlink" %>

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Dynamic Hyperlinks</title>
</head>
<body>
    <form id="form1" runat="server">

    <asp:DynamicDataManager  ID="DynamicDataManager1" 
        runat="server">
        <DataControls>
            <asp:DataControlReference ControlID="GridView1" />
        </DataControls>
    </asp:DynamicDataManager>

    <div>
        <h3>Dynamic Hyperlinks</h3>

         <h4>UnBound Control Action Links</h4>

        <asp:DynamicHyperLink ID="InsertHyperLink" runat="server" 
            Action="Insert"   
            TableName="ProductModels">Insert new item
        </asp:DynamicHyperLink>

        <br />

        <asp:DynamicHyperLink ID="DynamicHyperLink2" runat="server" 
            Action="Edit" 
            TableName="ProductModels"  
            ProductModelID="1">Edit item</asp:DynamicHyperLink>

        <h4>Data-Bound Control Meta-Table Action Links</h4>

        <asp:GridView ID="GridView2" runat="server" 
            AutoGenerateColumns="false"
            CellPadding="6">
            <Columns>
               <asp:TemplateField HeaderText="Table Name" 
                    SortExpression="TableName">
                    <ItemTemplate>
                        <asp:DynamicHyperLink ID="DynamicHyperLink1" 
                            runat="server"  
                            OnDataBinding="DynamicHyperLink_DataBinding"
                            TableName='<%# Eval("Name") %>'>
                                <%# Eval("DisplayName") %>
                        </asp:DynamicHyperLink>     
                    </ItemTemplate> 
                </asp:TemplateField>    
            </Columns>
        </asp:GridView>


        <h4>Data-Bound Control Table Row Action Links</h4>

        <asp:GridView ID="GridView1" runat="server" 
            AllowPaging="true" PageSize="5"
            DataSourceID="LinqDataSource1">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:DynamicHyperLink ID="EditHyperLink" 
                            runat="server"  
                            Action="Edit" Text="Edit" />       
                    </ItemTemplate> 
                </asp:TemplateField>    
            </Columns>
        </asp:GridView>



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

    </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

Partial Public Class DocSamples_DynamicDataDynamicHyperlink
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        If Not IsPostBack Then
            ' Get the list of visible tables.
            Dim tables As System.Collections.IList = _
            ASP.global_asax.model.VisibleTables

            ' Throw an exception if there are no visible tables.
            If tables.Count = 0 Then
                Throw New InvalidOperationException()
            End If

            ' Bind the data-bound control to 
            ' the list of tables.
            GridView2.DataSource = tables
            GridView2.DataBind()
        End If
    End Sub

    Protected Sub DynamicHyperLink_DataBinding( _
    ByVal sender As Object,ByVal e As EventArgs)
        Dim table As MetaTable = DirectCast(GetDataItem(), MetaTable)
        Dim dynamicHyperLink As DynamicHyperLink = _
        DirectCast(sender, DynamicHyperLink)
        ' Set the context type name for the DynamicHyperLink.
        dynamicHyperLink.ContextTypeName = _
        table.DataContextType.AssemblyQualifiedName
    End Sub
End Class



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;

public partial class DocSamples_DynamicDataDynamicHyperlink : 
    System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Get the list of visible tables.
            System.Collections.IList tables =
                ASP.global_asax.model.VisibleTables;

            // Throw an exception if there are no visible tables.
            if (tables.Count == 0)
            {
                throw new InvalidOperationException();
            }

            // Bind the data-bound control to 
            // the list of tables.
            GridView2.DataSource = tables;
            GridView2.DataBind();
        }
    }

    protected void DynamicHyperLink_DataBinding(object sender,
        EventArgs e)
    {
        MetaTable table = (MetaTable)GetDataItem();
        DynamicHyperLink dynamicHyperLink =
            (DynamicHyperLink)sender;
        // Set the context type name for the DynamicHyperLink 
        dynamicHyperLink.ContextTypeName =
            table.DataContextType.AssemblyQualifiedName;
    }
}


이 예제를 사용하려면 다음이 필요합니다.

표시: