지금 시각은 입니다.
닷넷 문제없어!
[Log-In]
관리자 로그인
  ID
  PW
Catagory
탐색 건너뛰기 링크입니다.
4월2024년 5월6월
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Tag Storm
감자탕  기네스  라푼젤  사용자정의 컨트롤  위도 경도 거리  위도경도거리  정규식  파일업로드  페이징  clear  display  float  InvalidOperationException  ip차단  onClientClick  RegisterClientScriptBlock  RegisterStartupScript  urlscan  WebKnight  z-index  
RSS 2.0   
Today : 29
Total  : 522452
사용자정의 컨트롤(User Control) 로 이벤트 활용하기 | ASP.Net Read : 7958
 Name : 이종원 IP : 112.155.39.46 
 Date : 2010-07-09 오후 1:43:11  

■ 보통 사용자정의 컨트롤은 헤더, 푸터 형식으로 단순 html 결합방식으로 이용했었는데,

마침 공부하다 재미있는 사항이 있어 한번 테스트 해봤다.

컨트롤은 컨트롤이다. ㅎㅎ 이벤트를 활용해 보자.

 ■ 작업할 파일 목록

LinkTableItem.cs   - LinkTableItem 클래스
LinkTable.ascx     - 이용하고자 하는 사용자정의 컨트롤
Default3.aspx       - 일반 웹페이지

 

■ LinkTableItem 클래스

// text, url 값으로 사이트명, 링크값 내용 저장하고 있는 클래스

 public class LinkTableItem
{
    private string text;
    public string Text
    {
        get { return text; }
        set { text = value; }
    }

    private string url;
    public string Url
    {
        get { return url; }
        set { url = value; }
    }

    public LinkTableItem()   {  }

    public LinkTableItem(string text, string url)
    {
        this.text = text;
        this.url = url;
    }
}

 

■ LinkTable.ascx.cs 화일

 public partial class LinkTable : System.Web.UI.UserControl
{
    public string Title
    {
        get { return lblTitle.Text; }
        set { lblTitle.Text = value; }
    }

    private LinkTableItem[] items;
    public LinkTableItem[] Items
    {
        get { return items; }
        set
        {
            items = value;
            GridView1.DataSource = items;
            GridView1.DataBind();
        }
    }

 

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    // LinkClicked 이벤트 선언
    public event LinkClickedEventHandler LinkClicked;

   // GridView1 의 Row 이벤트 처리 
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (LinkClicked != null)
        {
            LinkButton link = (LinkButton)e.CommandSource;

            LinkTableItem item = new LinkTableItem(link.Text, link.CommandArgument);
            LinkTableEventArgs args = new LinkTableEventArgs(item);

 

            // 이벤트 발생. 빵야~

            LinkClicked(this, args);

 

            // 해당 그 이벤트에 작동이 최소 된다면, 해당 페이지로 고고
            if (!args.Cancel) {
                Response.Redirect(item.Url);
            }
        }
    }

}

// 대리자 선언 지정

public delegate void LinkClickedEventHandler(object sender, LinkTableEventArgs e);


// 이벤트 매개변수 정보 클래스
public class LinkTableEventArgs : EventArgs
{
    private LinkTableItem selectedItem;
    public LinkTableItem SelectedItem
    {
        get { return selectedItem; }
    }

    private bool cancel = false;
    public bool Cancel
    {
        get { return cancel; }
        set { cancel = value; }
    }

    public LinkTableEventArgs(LinkTableItem item)
    {
        selectedItem = item;
    }
}

 

■ LinkTable.ascx 화일

 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="LinkTable.ascx.cs" Inherits="LinkTable" %>

 

<asp:Label ID="lblTitle" runat="server" Text="">타이틀 부분</asp:Label>

<table style="width: 61%; height: 167px;" border="1">
    <tr>
        <td>        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"
                CellPadding="4" ForeColor="Black" GridLines="Horizontal" Height="147px"
                ShowHeader="False" Width="302px" onrowcommand="GridView1_RowCommand">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                           
                            <asp:LinkButton ID="lnk" runat="server" CommandName="LinkClick" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"Url") %>' Text='<%# DataBinder.Eval(Container.DataItem,"Text") %>'></asp:LinkButton>
                           
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
                <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
            </asp:GridView>
       
        </td>
    </tr>
    </table>

 

■ Default3.aspx.cs

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

 

    protected void Page_Load(object sender, EventArgs e)
    {
        LinkTable1.Title = "링크 테이블의 타이틀 화면표시";

        LinkTableItem[] items = new LinkTableItem[3];
        items[0] = new LinkTableItem("Apress", "
http://www.apress.com");
        items[1] = new LinkTableItem("naver", "
http://www.naver.com");
        items[2] = new LinkTableItem("yahoo", "
http://www.yahoo.co.kr");

        LinkTable1.Items = items;

       

        // LinkClicked 이벤트를 LinkClickedEventHandler 에 연결

        LinkTable1.LinkClicked +=new LinkClickedEventHandler(OnLinkClicked);
    }
    // LinkClickedEventHandler 를 실제 처리하는 메소드
    protected void OnLinkClicked(object sender, LinkTableEventArgs e)
    {
        lblInfo.Text = "You clicked ' " + e.SelectedItem.Text

                                                 + " ' but this page chose not to direct you to ' " + e.SelectedItem.Url + " ' ";
        e.Cancel = true;
    }
}

 

■ Default3.aspx - 실제 웹페이지

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

<%@ Register src="LinkTable.ascx" tagname="LinkTable" tagprefix="uc2" %>

 

    <form id="form1" runat="server">
    <div>
                
        <uc2:LinkTable ID="LinkTable1" runat="server" />
        <br />
           
        <asp:Label ID="lblInfo" runat="server" Text=""></asp:Label>
    </div>
    </form>

 

■ 실행화면

 

실행 화면은 너무나도 단순하지만 그 실제 사용자 정의 이벤트를 실제 만들고 연동 시켜 봤다는데에 큰 의미를 두고 싶다

역시 프로그램은 재밌다 ^^;

 


참고 서적 : Pro ASP.NET 3.5 in C# 2008. <APRESS>

 Tag : 사용자정의 컨트롤
 Trackback : http://wonpaper.net/Trackbackhandler.ashx/board_aspnet/4
 나그네

와우 ~ 좋은글  잘 보고 갑니다.~

2010-08-02   
이름
비번
글목록
Copyright 2010 ~ 2024, wonpaper.net based on ASP.NET 3.5 using Web-Form.
Wonpaper 웹개발자의 닷넷블로그