2012-06-01 1 views
3

DataTableViewState을 할당합니다. DataTable을 업데이트하는 동안 ViewState가 자동으로 업데이트됩니다.

public void Method1() 
{  
    DataTable dt = getData(); //Gets the Data 

    ViewState["dtThis"] = dt; 
} 

지금은 DataTable에 할당 될 수 ViewState '를 실행방법 2'을 때.

public void Method2() 
{  
    DataTable dt2 = (DataTable)ViewState["dtThis"]; 

    dt2.Columns.Remove("FirstName"); //Removing a column 

    dt2.AcceptChanges(); 
} 

이제 방법 2의 실행 후 나는 (DataTable을)의 ViewState ("dtThis")를 확인할 때의 내가 다시 DT2를 지정하지 않은 경우에도 DataTable을 DT2을 가진 ViewState ("dtThis"). ("FirstName"열은 ViewSate ("dtThis") DataTable에서 제거됨을 의미합니다).

왜 ViewState의 이러한 유형의 동작입니까?

원본 ViewState를 유지 관리하는 방법은 무엇입니까?

+1

문제를 참조 해결합니다. – JSJ

답변

6

여러분은 datatable의 참조를 viewstate에 저장하고 있습니다. 따라서 viewstate["dtThis"]에서 수행 된 업데이트는 method1()에 할당 된 원래 Datatable obj에 직접 영향을줍니다. 원래보기 상태 데이터 테이블을 유지하기

한 가지 방법은 원래의 복제본을 생성하고

+0

그래서 해결책은 무엇입니까? 심지어 간단한 a = b를 시도해 보았습니다. b = c; c = a; 항상 원래의 값을 유지하기 위해 항상 type-method를 사용하지만 항상 업데이트됩니다. – nirav

+0

ViewState의 DataTable에만 적용 되는가, 아니면 ViewState에 List List (예 : 나쁜 예)가 있고 목록의 항목이 업데이트 된 경우 적용 되는가? – lloydphillips

+0

사람들이 ViewState를 사용할 수있는 방법을 고려할 때 ViewState가 언급 된 곳에서는이 동작이 빨간색으로 강조 표시되지 않는다고 생각할 수 없습니다. 나는 왜 내가 너무 오랫동안 내 viewstate [datatable]이 왔을 때까지 clobbered지고 알아 내려고 노력했다. – JoeManiaci

1

가 나는 이유에 대해 확실하지 오전 복제에서 작동하도록 DataTable.Copy()를 사용하는 것뿐만 아니라 나에게 있지만에서 일어난 나는 조금 바빴다. 그래서 나는 다른 방법을 선택했다. ViewState에서 datatable을 얻을 때 새로운 테이블을 만들고 원래 테이블의 레코드를 반복하고 새 테이블에 값을 설정합니다 :) 그래서 내 viewstate 테이블은 그대로 유지됩니다.

+0

나는 또한 그것을 시도했다. like - DataTable dt1 = ViewState ("dtThis"); DataTable dt_b = ViewState ("dtThis"); // dt1에서 열을 제거하십시오. ViewState ("dtThis") = dt_b; 또한 dt_b 및 ViewState ("dtThis")가 업데이트되었습니다. – nirav

+1

다음과 같이하십시오. DataTable dt1 = ViewState ("dtThis"); DataTable dt_b = new DataTable(); 이제 dt1의 열을 반복하고 dt_b의 해당 열을 추가하고 dt1의 행을 이동하고 dt_b의 해당 행을 추가합니다. 어떻게 작동하게 만들었습니까? –

0

과 같이 사용하고 당신을 도울 것 DT의 복사 방법을 사용하여 데이터 테이블 복사본을 만드는

DataTable dt2= ((DataTable)ViewState["dtThis"]).Copy(); 
+0

데이터 테이블이 실제로 큰 경우 메모리가 부족하지 않습니까? 궁극적으로 DataTable을 복사하고 새로운 DataTable을 작성하기 때문입니다. – nirav