2010-03-22 4 views
1

모든 데이터베이스 필드에 바인딩되지 않은 템플릿 열에 의해 GridView 행을 정렬하려고합니다. 이 템플릿 coulmn은 데이터 바인딩 된 다른 열의 값에 따라 코드에서 텍스트를 설정 한 레이블을 가지고 있습니다. 그래서 열이 연결되어 있지 않기 때문에 sortExpression을 설정하는 방법에 집착하고 있습니다.언 바운드 서식 파일 열에 의해 Gridview 행을 정렬하는 방법

답변

0

원하는 동작을 수행 할 수 있습니다. 여기에해야 할 일이 있습니다 :

1) GridView의 정렬 이벤트를 구독하십시오.
2) "MyOwnSortExpression"과 같이 SortExpression을 생성 열에 추가하십시오. 2) 이벤트 처리기에서 EventArgs를 통해 SortExpression에 액세스 할 수 있습니다. e.SortExpression 3) GridView에서 데이터 바인딩을 수행하는 메서드를 만듭니다. 이 메서드에는 2 개의 매개 변수가 있습니다. 첫 번째는 정렬해야하는 열의 이름이고 두 번째는 Sortdirection입니다. (동일한 열을 두 번 클릭 한 후 정렬 방향을 전환하는 것이 좋을 것입니다.) 4) 원하는 Columsn에서만 수동으로 정렬을 수행하는 코드 스위치를 추가하십시오.

는 :

protected void gv_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    if(e.SortExpression == MyOwnSortExpression) 
    { 
    UpdateDataBinding(e.SortExpression, e.SortDirection); 
    e.Cancel = true; 
    return; 
    } 
} 

protected void UpdateDataBinding(String sortexpression, SortDirection direction) 
{ 
    switch(sortExpression) 
    { 
    case "MyOwnSortExpression": 
     var myData = GetYouSpecificDataFromDB(); 
     if(direction == SortDirection.Ascending) 
     { 
     var = var.OrderBy(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression); 
     } 
     else 
     { 
     var = var.OrderByDescending(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression); 
     } 
     this.gv.DataSource = var.ToList(); 
     this.gv.DataBind(); 
     break; 
    } 
} 

당신은 sortdirection과 토글 메커니즘을 사용할 수 있도록 정렬 열 캐싱을 추가 할 수 있습니다.

귀하의 솔루션은 LINQ (-에-SQL, ObjectDataSource를, ...)

http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx도 좋은 클래스를 제공이 링크를하고있는 당신을 데이터 바인딩의 종류에 따라 다를 수 있습니다. 표시 될 모든 값을 포함하는 Wrapper 클래스를 작성할 수 있으면 가장 잘 작동합니다. 필자가 제안한 솔루션은 래퍼 클래스가 필요 없지만 유연성이 부족합니다.

관련 문제