자바스크립트 호출로Ajax 판넬의 데이터 업데이트

 

 

image

 

“자바스크립트로 DataList 업데이트” (Button1)를 클릭하면 
“숨김버튼 자바스크립트로 이버튼 클릭”"(Button2) 를 이벤트를 비하인드로 실행시킨다.
 
WebFrom1.aspx
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <script>
            function UpdateGrid() {
                alert("업데이트 호출");

                <%=Page.GetPostBackEventReference(Button2)%>;
                return false;
            }

        </script>
    <div>
    
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:DataList ID="DataList1" runat="server">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                        <br />
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("RegDate") %>'></asp:Label>
                    </ItemTemplate>
                </asp:DataList>
                <asp:Button ID="Button2" runat="server" Text="숨김버튼 자바스크립트로 이버튼 클릭" OnClick="Button2_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
    
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="자바스크립트로 DataList 업데이트"  OnClientClick="return UpdateGrid();" />
    
    </div>
    </form>
</body>
</html>
WebForm1.cs
    public partial class WebForm1 : System.Web.UI.Page
    {
        DataTable dt = new DataTable();

        protected void Page_Load(object sender, EventArgs e)
        {
            dt.Columns.Add("Name");
            dt.Columns.Add("RegDate");

            UpdateDatetime();
        }

        private void UpdateDatetime()
        {
            dt.Rows.Clear();
            for (int i = 0; i < 10; i++)
            {
                DataRow row = dt.NewRow();
                row["Name"] = i.ToString();
                row["RegDate"] = DateTime.Now.ToString();
                dt.Rows.Add(row);
            }

            this.DataList1.DataSource = dt;
            this.DataList1.DataBind();

        }

        protected void Button2_Click(object sender, EventArgs e)
        {
           //자바스크립트로 Button2클릭 이벤트를 호출해서 들어온 이벤트
            UpdateDatetime();
        }


    }
 
 
<%=Page.GetPostBackEventReference(Button2)%>; 이것만 알면 끝~

닷넷 홈페이지 및 웹사이트를 개발하기 위한 툴은 따로 있긴합니다.

이툴은 아래와 같이 한번에 여러개의 브라우저를 테스트를 할수도 있습니다. 근데 써보니깐
드림위버보다 훨씬 못하다는 느낌입니다. ㅋ

http://www.microsoft.com/expression/products/Web_Overview.aspx

image

이툴은 아래와 같이 한번에 여러개의 브라우저를 테스트 할 수 있다

image

 

여기서는 그냥 비주얼 스튜디오로 하는 방법을 소개.

트라이얼 버전을 다운받거나 무료버전인 비주얼 스튜디오2010 익스프레션 버전을 받을 수 있습니다.

비주얼 스튜디오 다운받기
http://www.microsoft.com/web/downloads/platform.aspx


Microsoft Web Platform Installer 3.0
Microsoft Web Platform Installer 3.0은 Internet Information Services (IIS), SQL Server Express, .NET Framework와 Visual Web Developer와 같은 마이크로소프트 웹 플랫폼의 최신 콤포넌트를 무료로 쉽게 다운로드하고 설치합니다. 또한 Web PI는 Windows Web Application Gallery에 내장된 블로그를 위한 웹 어플리케이션과 컨텐츠 관리도구 등을 보다 쉽고 편리하게 설치하고 실행하도록 도와줍니다.

image

 

또는 아래의 사이트로 이동해서 평가판을 다운로드 합니다.

http://www.microsoft.com/downloads/ko-kr/details.aspx?FamilyID=26bae65f-b0df-4081-ae6e-1d828993d4d0

image

 

보통은 프로그래머가 구성을 해줄텐데 일단 이런게 있다는것만 알고 넘어갑시다 ㅎ
웹사이트와 웹응용프로그램의 차이

image

  • 디버깅 세션을 중지하지 않고 코드를 편집할 수 있도록 하려는 경우

  • ASP.NET 페이지와 연결된 클래스 파일에 있는 코드에 대한 단위 테스트를 실행하려는 경우

  • 독립 실행형 클래스의 사용자 정의 컨트롤 및 페이지와 연결된 클래스를 참조하려는 경우

  • 여러 웹 프로젝트 간에 프로젝트 종속성을 설정하려는 경우.

  • 컴파일러에서 전체 사이트에 대해 단일 어셈블리를 만들고자 하는 경우.

  • 사이트에 대해 생성되는 어셈블리 이름과 버전 번호를 제어하려는 경우.

  • MSBuild 또는 팀 빌드를 사용하여 프로젝트를 컴파일하려는 경우.예를 들어 빌드 전 단계와 빌드 후 단계를 추가할 수 있습니다.

  • 프로덕션 서버에 소스 코드를 저장하지 않으려는 경우

  • Visual Studio 2010에서 사용할 수 있는 자동 배포 도구를 사용하려는 경우

image

  • C# 및 Visual Basic 코드를 단일 웹 프로젝트에 포함하려는 경우.기본적으로 웹 응용 프로그램은 프로젝트 파일의 언어 설정에 따라 컴파일됩니다.예외를 만들 수 있지만 예외를 만들기는 비교적 어렵습니다.

  • Visual Studio에서 프로덕션 사이트를 열고 FTP를 사용하여 실시간으로 업데이트하려는 경우

  • 프로젝트를 배포하기 위해 프로젝트를 명시적으로 컴파일할 필요가 없도록 하려는 경우

  • 사이트를 미리 컴파일할 때 컴파일러에서 페이지 또는 사용자 정의 컨트롤당 하나의 어셈블리를 포함하거나 폴더당 하나 이상의 어셈블리를 포함할 수 있는 사이트에 대해 여러 어셈블리를 만들도록 하려는 경우

  • 프로덕션 환경에서 프로덕션 서버에 새 버전을 복사하거나 프로덕션 서버에서 직접 파일을 편집하여 개별 파일을 업데이트할 수 있게 하려는 경우.

  • 사이트를 미리 컴파일할 때 전체 웹 사이트를 다시 컴파일할 필요 없이 개별 ASP.NET 웹 페이지(.aspx 파일)를 업데이트할 수 있도록 하려는 경우

  • 추가 백업 복사본으로 사용할 수 있도록 프로덕션 서버에 소스 코드를 저장하려는 경우

 

여기서 부터 디자이너가 알면되는  asp.net 페이지 구성하기

들어가기전에 크게 3가지 정도만 알면됩니다.

.aspx 일반적인 컨텐츠 페이지 (내용페이지  asp로 치면 .asp )
.master 일관성있는 레이아웃  구성을 위한 마스터페이지
.ascx 유저컨트롤 페이지 (주로 메뉴 로그인 창 등등 asp로 치면 inc 파일 정도 )

image

사이트 만들어보기

회원가입 레이아웃은 아래와 같이 페이지를 구성을 할껍니다.

asp는 회원가입.asp 정보입력.asp 등이 있다면 회원가입.asp 에 메뉴 menu.inc(또는 menu.asp) , leftMenu.inc(또는 leftMenu.asp) 등 이렇게 삽입 했을 껍니다.

asp.net 에서는 menu.inc (닷넷에서는 menu.ascx) leftMenu.inc(또는 leftMenu.ascx) 등을 포함한 마스터페이지를 만들어 이 마스터 페이지를 이용해서 컨텐츠 페이지를 생성합니다.

image

asp.net 으로 구성해 본다면 대략 아래 처럼 됩니다.

image

웹사이트 프로젝트를 생성합니다.


image

 

image

우선 각각의 파일을 만들어 줍니다.

image

 

image

 

 

마스터페이지에 대략적인 윤각을 잡아줍니다.
ASP PHP에는 없는 개념인데 asp는 페이지에 메뉴를 인쿠르드 한다면 마스터페이지를 가지고 컨텐츠페이지를 만든다고 생각하시면됩니다.

 

MasterPage.master

image

마스터 페이지를 만들고 이 마스터페이지를 기준으로 컨텐츠 페이지를 넣을껍니다. 회원가입 컨텐츠 페이지 비밀번호찾기 컨텐츠 페이지등등 이때 컨텐츠를 넣을수 있는 영역이 ContentPlaceHolder 부분입니다.

image

<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
이 영역안에 컨텐츠가 들어갑니다. (회원가입으로 치면 약관동의 등등) </asp:ContentPlaceHolder>
 

생성한 Menu.ascx / TopMnu.ascx 파일을 끌어서 마스터 페이지에 넣습니다.

image

이렇게 되면 우선 마스터 페이지의 구성이 완료되었습니다.

마스터페이지를 가지고 컨텐츠 페이지를 만듭니다.
image

만들어진 컨텐츠 페이지에서는 ContentPlaceHolder  영역 이외는 수정 할 수가 없습니다.

image

ContentPlaceHolder  에다가 컨텐츠 내용을 삽입합니다.

(ContentPlaceHolder 는 두개 이상 마스터페이지에 삽입 가능합니다.)

image

브라우저에서 보기로 컨텐츠를 확인합니다.

image

비주얼 스튜디오 자체가 IIS를 구동 할 수 있어서 바로 확인이 가능합니다.

image

잘나온다!

image

이런씩으로 주요 카테고리마다 마스터페이지를 잡아 컨텐츠 페이지를 구성하면됩니다.

image

참고로 마스터안에 마스터를 넣을수도 있고 ContentPlaceHolder에 Menu.ascx를 넣어서 컨텐츠 페이지마다 바꿔끼울수도 있습니다.

image

image

사용자가 좀더 URL을 쉽게 이해할 수 있도록 해준다.

사용자가 /Products/Books.aspx 이렇게 치고 들어오면 아래와 같이

빽단에서 다시 URL 을 재작성 해서 보내준다.

 

   void Application_BeginRequest(object sender, EventArgs e) {

        string fullOrigionalpath = Request.Url.ToString();
        
        if (fullOrigionalpath.Contains("/Products/Books.aspx")) {
            Context.RewritePath("/Products.aspx?Category=Books");
        }
        else if (fullOrigionalpath.Contains("/Products/DVDs.aspx")) {
            Context.RewritePath("/Products.aspx?Category=DVDs");
        }
    }  

 

자세한 내용은  ScottGu’s 에서 ㄱㄱ

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

프로젝트

image

ico 폴더안에 있는 이미지를 가지고 와서 페이지에 뿌려준다

코드는 간단하니깐 설명은 패쓰~

 

aspx 소스

image

image 

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script>
        function SelectImage(img) {
            document.getElementById("userView").innerHTML = "<img src='/ico/" + img+"'>";
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <strong>폴더에서 이미지를 읽어와서 리스트 뿌려주는부분<br />
    </strong><br />
    <asp:DataList ID="DataList1" runat="server">
        <ItemTemplate>
            <img src='/ico/<%# GetFileName( (string)Container.DataItem ) %>' style="height: 60px;
                width: 64px" />
            <input id="Button2" type="button" value="이미지 선택" onclick="SelectImage('<%# GetFileName( (string)Container.DataItem ) %>')" />
        </ItemTemplate>
    </asp:DataList>
    </div>
    </form>
    <p>
        <strong>클릭후 나타나는 부분</strong></p>
    <hr />
    <p>
        선택한 이미지 &gt;&gt;&gt;<span id="userView"></span></p>
    <p>
        &nbsp;</p>
</body>
</html>

CS 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //실제물리적 경로를 가지고 옵니다. //C:\Users\kojaedoo\Documents\Visual Studio 2010\WebSites\WebSite1\ico   
            string url = Server.MapPath("./ico");
           
            //파일 목록을 가지고 옵니다.
            string[] filelist = Directory.GetFiles(url);

            //
            this.DataList1.DataSource = filelist;
            DataList1.DataBind();
        }
    }


    //Default.aspx 에서 풀네임 경로에서 파일 이름만 가지고 옵니다.
    //C:\Users\kojaedoo\Documents\Visual Studio 2010\WebSites\WebSite1\ico\untitled-1_hun0026.jpg 에서
    //untitled-1_hun0026.jpg 만 추출한다.
    public string GetFileName(string fullFileName)
    {

        return Path.GetFileName(fullFileName);
    }
}

구현된 모습

image

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

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <br />
        <asp:DataList ID="DataList1" runat="server">
            <ItemTemplate>
                <img src='/ico/<%# (string)Container.DataItem %>' />              
            </ItemTemplate>
        </asp:DataList>

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

선택한 행의 데이터 키 값을 확인하는 방법 과 EditItemTemplate 에서 컨트롤의 값을 가져오기

(사용자작업일때)

다음 코드 예제에서는 DataKeys 속성을 사용하여 GridView 컨트롤에서 선택한 행의 데이터 키 값을 확인하는 방법을 보여 줍니다.

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

 // 수정할려는 수정템플릿의 값을 가져오는 방법
        GridViewRow row = GridView1.Rows[e.RowIndex];

        TextBox CTextBoxbMove_url = (TextBox)row.FindControl("TextBoxbMove_url");

//GridView의 고유값을 가져오는 방법

//GridView 에서 DataKeyNames가 설정되어져있어야함

        int index = GridView1.SelectedIndex;

        Response.Write("e.Keys::: " + this.GridView1.DataKeys[e.RowIndex].Value );

//데이터베이스에 저장하기

    SqlConnection conn = new SqlConnection(AspxUtil.GetDBStr());
        conn.Open();
        SqlCommand comm = new SqlCommand("UPDATE SEARCH_BAR_TEXT_BANNER SET banner_text =@banner_text  ,move_url=@move_url WHERE IDX=@idx  ", conn);
        comm.Parameters.Add("@banner_text", SqlDbType.VarChar).Value = ((TextBox)row.FindControl("TextBoxbMove_url")).Text;
        comm.Parameters.Add("@move_url", SqlDbType.VarChar).Value = ((TextBox)row.FindControl("TextBoxbMove_url")).Text;
        comm.Parameters.Add("@idx", SqlDbType.Int).Value = this.GridView1.DataKeys[e.RowIndex].Value;
        comm.ExecuteNonQuery();

GridView1.DataBind();
        this.GridView1.EditIndex = -1;

    }

 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="idx"

OnRowUpdating="GridView1_RowUpdating"   >

<asp:TemplateField HeaderText="banner_open" >
         <EditItemTemplate>
         <asp:TextBox ID="TextBoxBanner_open" runat="server" Text='<%# Bind("banner_open") %>'></asp:TextBox>
         </EditItemTemplate>
<ItemTemplate>

리스트 뿌려줄때 그안에 속한 컨트롤 제어하기 DataBound

데이터가 바운드될때 dropDownList를 찾아서 데이터베이스에 저장된 값에 따라 셀렉트를 선택한다

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {       

     //데이터값 가져오기
           DataRowView dr = (DataRowView)e.Row.DataItem;   

       //DropDownListBanner_open 이름의 컨트롤 찾기
           DropDownList dl = (DropDownList)e.Row.FindControl("DropDownListBanner_open");

//만약컨트롤이 있다면 selected 시키자
           if (dl != null){             
               dl.SelectedIndex = (int)dr["banner_open"];
            }

        }

    }

RowCommand 에서 데이터 접근하기

  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

            //컨트롤텍스트에 접근하기
            string m_id = this.GridView1.Rows[int.Parse(e.CommandArgument.ToString())].Cells[1].Text;

             //DataKeys 에 접근하기

            //Response.Write(this.GridView1.DataKeys[ int.Parse( e.CommandArgument.ToString() )  ].Value);

        }

  <ItemTemplate>일때 접근방법

  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

            ImageButton btn = ((ImageButton)e.CommandSource);
            int row_num = (int)((GridViewRow)btn.Parent.Parent).RowIndex;

        }

기본적으로 왠만한건(?) 다 제공이된다

image

하지만 디자이너와 같이 작업을 한다면...

image

암튼 위에처럼 페이징을 꾸밀수있따 ㅋㅋ

이미지버튼을 쓰던지.. CommandName 와 CommandArgument  만 세팅해주면된다

위의 이미지 코드

<PagerTemplate>

<asp:Button ID="Button1" runat="server" CommandArgument="1" CommandName="Page" Text="1" />

<--1페이지

<asp:Button ID="Button2" runat="server" CommandArgument="2" CommandName="Page" Text="2" />

<--2페이지

<asp:Button ID="Button3" runat="server" CommandArgument="First" CommandName="Page"   Text="First" />

<--처음으로

<asp:Button ID="Button4" runat="server" CommandArgument="Next" CommandName="Page"   Text="Next" />

<--다음페이지
</PagerTemplate>

위에는 숫자(페이지번호)는 버튼은 For문을 돌리던지 어케 알아서....

(CustomersGridView.PageCount 이용)

아래는 MSDN....

이미지를 사용하여 페이징 컨트롤의 모양을 사용자 지정할 수도 있습니다. PagerSettings 클래스에는 첫 번째, 마지막, 이전 및 다음 페이지 명령 단추에 대한 이미지 URL 속성이 포함되어 있습니다.

마지막으로, GridView 컨트롤의 PagerStyle 속성을 TableItemStyle 값으로 설정하여 페이징 명령의 모양을 조정할 수 있습니다.

데이터 페이징 템플릿

GridView 컨트롤의 AllowPaging 속성을 true로 설정하면 GridView 컨트롤에서 페이징을 위한 UI(사용자 인터페이스) 컨트롤을 자동으로 추가합니다. PagerTemplate 템플릿을 추가하여 페이징을 위한 UI를 사용자 지정할 수 있습니다. 수행할 페이징 작업을 지정하려면 CommandName 속성이 Page로 설정되고 CommandArgument 속성이 다음 값 중 하나로 설정된 Button 컨트롤을 포함합니다.

  • First   첫 번째 페이지로 이동하려는 경우

  • Last   마지막 페이지로 이동하려는 경우

  • Prev   이전 페이지로 이동하려는 경우

  • Next   데이터의 다음 페이지로 이동하려는 경우

  • 숫자(정수값)   특정 페이지로 이동하려는 경우

PagerTemplate 속성을 설정하면 기본 제공 페이저 행 UI는 무시됩니다.

예제

다음 코드 예제에서는 DropDownList 컨트롤을 사용하여 GridView 컨트롤을 탐색하는 데 사용할 수 있는 사용자 지정 페이저 템플릿을 만드는 방법을 보여 줍니다.

<%@ Page language="C#" %>

<script runat="server">

  void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
  {

    // Retrieve the pager row.
    GridViewRow pagerRow = CustomersGridView.BottomPagerRow;
    // Retrieve the PageDropDownList DropDownList from the bottom pager row.
    DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");

    // Set the PageIndex property to display that page selected by the user.
    CustomersGridView.PageIndex = pageList.SelectedIndex;

  }

  void CustomersGridView_DataBound(Object sender, EventArgs e)
  {

    // Retrieve the pager row.
    GridViewRow pagerRow = CustomersGridView.BottomPagerRow;
    // Retrieve the DropDownList and Label controls from the row.
    DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
    Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");
    if(pageList != null)
    {
      // Create the values for the DropDownList control based on
      // the  total number of pages required to display the data
      // source.
      for(int i=0; i<CustomersGridView.PageCount; i++)
      {
        // Create a ListItem object to represent a page.
        int pageNumber = i + 1;
        ListItem item = new ListItem(pageNumber.ToString());        
        // If the ListItem object matches the currently selected
        // page, flag the ListItem object as being selected. Because
        // the DropDownList control is recreated each time the pager
        // row gets created, this will persist the selected item in
        // the DropDownList control.  
        if(i==CustomersGridView.PageIndex)
        {
          item.Selected = true;
        }
        // Add the ListItem object to the Items collection of the
        // DropDownList.
        pageList.Items.Add(item);
      }
    }
    if(pageLabel != null)
    {
      // Calculate the current page number.
      int currentPage = CustomersGridView.PageIndex + 1;    
      // Update the Label control with the current page information.
      pageLabel.Text = "Page " + currentPage.ToString() +
        " of " + CustomersGridView.PageCount.ToString();
    }   
  }

</script>

<html>
  <body>
    <form runat="server">
      <h3>GridView PagerTemplate Example</h3>

      <asp:gridview id="CustomersGridView"
        datasourceid="CustomersSqlDataSource"  
        autogeneratecolumns="true"
        allowpaging="true"
        ondatabound="CustomersGridView_DataBound" 
        runat="server">
        <pagerstyle forecolor="Blue"
          backcolor="LightBlue"/>
        <pagertemplate>
          <table width="100%">                   
            <tr>                       
              <td width="70%">
                <asp:label id="MessageLabel"
                  forecolor="Blue"
                  text="Select a page:"
                  runat="server"/>
                <asp:dropdownlist id="PageDropDownList"
                  autopostback="true"
                  onselectedindexchanged="PageDropDownList_SelectedIndexChanged"
                  runat="server"/>
              </td>  
              <td width="70%" align="right">
                <asp:label id="CurrentPageLabel"
                  forecolor="Blue"
                  runat="server"/>
              </td>
            </tr>                   
          </table>
        </pagertemplate>
      </asp:gridview>
      <!-- This example uses Microsoft SQL Server and connects  -->
      <!-- to the Northwind sample database. Use an ASP.NET     -->
      <!-- expression to retrieve the connection string value   -->
      <!-- from the Web.config file.                            -->
      <asp:sqldatasource id="CustomersSqlDataSource" 
        selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
        connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
        runat="server">
      </asp:sqldatasource>
    </form>
  </body>
</html>

 

임시해결책 ㅜ_ㅜ

속도 처리가 늦지만 간단하게 쓰고 싶을때..

SqlDataSource 자체검색을 많이 쓴다 컨트롤이 하나이면 상관없는데.. 두개 이상의 컨트롤이 있으면

검색이 안된다(?!) (두개다 값이 있어야 한다)

그럴때 ....


 

 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
            BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"
            CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Horizontal">
            <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
            <Columns>
                <asp:BoundField DataField="idx" HeaderText="idx" SortExpression="idx" />
                <asp:BoundField DataField="board_big_type" HeaderText="board_big_type" SortExpression="board_big_type" />
                <asp:BoundField DataField="member_id" HeaderText="member_id" SortExpression="member_id" />
                <asp:BoundField DataField="read_num" HeaderText="read_num" SortExpression="read_num" />
                <asp:BoundField DataField="board_name" HeaderText="board_name" SortExpression="board_name" />
            </Columns>
            <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
            <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
        </asp:GridView>

 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ALIMBADAConnectionString %>"
            FilterExpression="member_id='{0}'" SelectCommand="SELECT * FROM [001_BOARD]" OnFiltering="SqlDataSource1_Filtering">

 

 

//컨트롤이 한개일땐 상관없지만..

//컨트롤이 두개이면 두개가 다 입력이 되어야만 검색이된다...TextBox1에 값이 없으면 검색안됨
<FilterParameters>
     <asp:ControlParameter ControlID="TextBox1" Name="member_id" 

    PropertyName="Text" DefaultValue=" " /> <--DefaultValue에 공백 추가
     <asp:ControlParameter ControlID="DropDownList1" 

Name="newparameter"  PropertyName="SelectedValue" />
            </FilterParameters>


</asp:SqlDataSource>

 

//일단 디폴트 값이 있으면  OnFiltering="SqlDataSource1_Filtering" 이벤트를 거쳐간다

//값이 없으면 건너뜀

 

   protected void SqlDataSource1_Filtering(object sender, SqlDataSourceFilteringEventArgs e)
    {

        if (TextBox1.Text == "")
        {
            SqlDataSource1.FilterExpression = ""; //전체검색이것지요 디폴드값이 " " 이였기때문에...
        }else{


             SqlDataSource1.FilterExpression = "요기에 필요한 검색조건 처리 등등 응용하면됨";
             //SqlDataSource1.FilterExpression = "member_age ='"+this.DropDownList1.SelectedValue+"' 
              //and member_id ='"+TextBox1.Text+"';
       }
    }

마스터 페이지 TestMaster.MASTER

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;

public partial class MasterPage_MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public void Test() {

        Response.Write("날 부른거냐?");
    }

}

TestMaster.MASTER로 생성된 default.aspx 컨텐츠 페이지

public partial class MasterPage_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

MasterPage_MasterPage mc = (MasterPage_MasterPage )this.Page.Master;
        mc.Test();
    }
}

초간단한 사용법

a.aspx 의 TextBox1 컨트롤의 데이터 값을 b.aspx 에서 엑세스 할수 있다

a.aspx

<asp:TextBox ID="TextBox1" runat="server" Height="100px" TextMode="MultiLine"  Width="569px"></asp:TextBox>

<asp:ImageButton ID="ImageButtonFreeView" runat="server" PostBackUrl="Preview.aspx" />

b.aspx

if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
        Label1.Text = SourceTextBox.Text;
    }
}

마스터 페이지 컨트롤에 접근할떄

ContentPlaceHolder 는 마스터페이지의 컨텐츠 영역입니다. 그 영역안에 있는 컨트롤 접근방법입니다 

   if (PreviousPage != null && PreviousPage.IsCrossPagePostBack)
        {           
            if (PreviousPage.Master.FindControl("ContentPlaceHolder1") != null)
            {
                Response.Write(((TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBoxMyEmail")).Text);
            }
        }
        else
        {
            Response.Write("Not a cross page postback");
        } 

+ Recent posts