본문 바로가기

Programming/ASP .NET

동적으로 생성한 Table Control의 State 저장하고 불러오기

요구사항 : 동적으로 구성한 Table Control의 상태를 유지
배경 : Database에서 특정 데이터를 가져와 가공한 뒤 사용자의 입맛에 맞게 테이블로 그 결과를 구성하였다. 하지만 다른 컨트롤을 조작하여 PostBack이 일어난다면 이전에 바운딩한 테이블 정보들이 모두 초기화 된다. 따라서 PostBack이 일어나도 이전 단계의 테이블 상태를 유지하는 것이 필요하였다.
조건 : 테이블 내용이 바뀔 필요가 없는 경우 PostBack이 일어난 뒤 DB 접근은 하지 않는다.

예제 코드

 Table Table_Work_History;

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack){            
        if(Session["Table"] != null){
            Table_Work_History = (Table)Session["Table"]; // 저장된 테이블 상태 로딩
            PH.Controls.Add(Table_Work_History); // PH : Place Holder
        }           
    }
}

protected void rend_working()
{
    // Bounding Code

    Session["Table"] = Table_Work_History; // 테이블 상태를 세션에 저장
}

참고 :
 - Place Holder를 쓴이유는 테이블을 로딩한 후에 특정 위치에 넣어주기 위함이다.
 - Session을 이용하여 상태를 저장한 이유는 ViewState를 사용하면 Serializable 예외가 발생하기 때문이다.