2011-05-09 5 views
1

나는 나의의 GridView를 정렬하려면이 이벤트 핸들러 및 방법을 실행하지만, 그것이 null이 있다고 SAIS :정렬 후 GridView가 NULL이됩니까?

protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     DataTable dtSortTable = gvMeldingen.DataSource as DataTable; 

      DataView dvSortedView = new DataView(dtSortTable); 
      dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection); 
      gvMeldingen.DataSource = dvSortedView; 
      gvMeldingen.DataBind(); 

    } 
    private string getSortDirectionString(SortDirection sortDirection) 
    { 
     string newSortDirection = String.Empty; 
     if (sortDirection == SortDirection.Ascending) 
     { 
      newSortDirection = "ASC"; 
     } 
     else 
     { 
      newSortDirection = "DESC"; 
     } 
     return newSortDirection; 
    } 

저를 도와주세요. 미리 감사드립니다.

이것은 내가 얻은 오류입니다. DataTable은 DataView를 사용하기 전에 설정해야합니다.

그리고이 강조 : dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection)

+0

이 dtSortaTable null의 각 시간을 설정하는 것입니다

해결책은 아래에 데이터 소스 다시 쿼리입니까? 페이지의 Load 이벤트에 코드를 게시 할 수 있습니까? – Larry

+0

로드 이벤트 없음 – SamekaTV

+0

이 오류가 발생합니다. DataTable은 DataView를 사용하기 전에 설정해야합니다. 및이 강조 표시 : dvSortedView.Sort = e.SortExpression + ""+ getSortDirectionString (e.SortDirection); – SamekaTV

답변

2

데이터 소스 속성을 왕복하는 동안 손실됩니다. 그것이 DataTable dtSortTable = gvMeldingen.DataSource as DataTable;이 null이고 DataView dvSortedView = new DataView(dtSortTable);이 유효하지 않은 이유입니다.

데이터 그레이드에서 정렬 하이퍼 링크를 누르면 클라이언트에서 서버로 다시 게시가 트리거됩니다. 그런 다음 ASP.NET은 ViewState 등의 지속성 데이터를 사용하여 응답 페이지를 구성합니다.

데이터 원본 속성은 왕복간에 지속 된 상태의 일부가 아니므로 해당 값이 손실됩니다.

protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     var SortExpression = e.SortExpression + " " + getSortDirectionString(e.SortDirection); 

     gvMeldingen.DataSource = ... // Requery the Data using the new sort expression above 
     gvMeldingen.DataBind(); 
    } 

또 다른 솔루션은 데이터 소스를 Page_Load 이벤트 (권장하지 않음)

+0

이렇게하면 SortExpression 유형에 직접 할당 할 때 오류가 발생합니다. – SamekaTV

+0

및 gvMeldingen의 데이터 소스는 어떻게됩니까? – SamekaTV

+0

gvMeldingen의 DataSource에 대해, 처음 채워지는 곳에 코드 조각을 게시 할 수 있습니까? – Larry

0

당신이 DataTable 주위에 DataView 퍼팅되기 때문에이 방법은 첫 번째 시간 (데이터 소스가 처음부터 DataTable이라고 가정)를 작동합니다. 다음 번에 데이터 소스가 DataView 일 때 DataTable으로 전송할 수 없습니다.

데이터 원본이 항상 DataView이되도록 DataTable의 기본보기를 데이터 원본으로 사용하십시오. 그런 다음 소스보기를 얻을, 그에서 기본 테이블을 얻을 수 있습니다 :

DataView view = gvMeldingen.DataSource as DataView; 
DataTable dtSortTable = view.Table; 
+0

DataSource가 왕복간에 지속되는지 확실하지 않습니다. – Larry

+0

이것은 코드 다음에 오는 오류입니다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. – SamekaTV

+0

이 부분이 강조 표시됩니다. DataTable dtSortTable = view.Table; – SamekaTV

관련 문제