2010-11-22 7 views
1

시작시 데이터베이스에서 농담을 얻어 내고 화면에 첫 번째 농담을 보여주는 애플리케이션을 만들었습니다. 이제 다음 버튼을 누르면 두 번째 농담이 표시됩니다. 처음 농담을 할 때 전 세계적으로 선언 된 데이터 테이블에 넣었습니다.포스트 백 이후에 데이터 유지 보수

Title.Value = dt.Rows[0]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0]["joke_content"].ToString(); 

를 이제 다음 버튼 내가이 명령을 실행 해요 쳤을 때 :

Title.Value = dt.Rows[0+1]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0+1]["joke_content"].ToString(); 

하지만 다음 버튼을 누르 때, 다시 페이지 게시물과 내가 뭘 최초의 농담을 표시하려면 나는 데이터 테이블의 값을 잃어 버린다. 데이터 테이블의 데이터를 손실하지 않고 오류를 해결하려면 어떻게해야합니까?

+0

"전 세계적으로 선언 된 데이터 테이블"이란 정확히 무엇을 의미합니까? – Carson63000

답변

3
i put them in a globally declared datatable 

이 데이터 테이블은 어디에 선언되어 있습니까? 귀하의 페이지 클래스에서? 이 코드를 보여줄 수 있습니까? 페이지 클래스에 있으면 포스트 백간에 유지되지 않습니다. 페이지 클래스는 요청마다 새로 작성되며 상태를 유지하지 않습니다.

포스트 백간에 상태를 유지하려면 데이터 테이블의 이전 값을 유지 관리 할 수 ​​있도록 Viewstate/Session과 같은 상태 관리 메커니즘을 사용해야합니다.

+0

어떻게 datatable을 세션 변수에 넣을 수 있습니까? –

+2

세션 [ "SomeUniqueKey"] = datatable; – InSane

1

페이지가 렌더링 될 때 해당 페이지 클래스에서 생성 된 모든 개체가 삭제됩니다. 이제 포스트 백이 발생하면 데이터 테이블에 어떤 데이터도 포함되지 않습니다. 다시 게시를 통해 데이터를 유지하려면 InSane이 말한 것처럼 어딘가에 저장해야합니다. 데이터 테이블에 행 수가 적 으면 세션 객체를 사용하는 것이 가장 좋습니다. 다시 읽고, 다음 세션에서 데이터 테이블을 그 여부를 다시 게시를 확인 PageLoad 이벤트 핸들러의 시작 부분에서

Session["myTable"] = dt; 

과 : 당신이 데이터베이스에서 행을 검색하면

, 세션에 데이터 테이블을 저장 :

if(this.IsPostBack == true) 
{ 
    DataTable dt = (DataTable)Session["myTable"]; 
} 
else 
{ 
    // fetch the records from database 
} 

데이터 테이블은 여러 세션에서 사용할 수 없습니다.

0

정적 데이터 테이블로도이를 해결할 수 있습니다. 그러나 데이터 테이블은 모든 스레드에서 정적입니다.

관련 문제