문제

나는버 설정 방법은 다음과 같습니다.

  • 에 바인딩 List<T> 코드에서 뒤에(나를 사용하여 내 사용자 지정 BOL)
  • 아 DataSource 개체 HTML 페이지에
  • 정렬에서 각각하는 열이 나는 선택(이하 SortExpressions 은 모두가 올바르게 설정)

그러나 나는 다음과 같은 오류 메시지:

의트'myGridView'해고 이벤트를 정렬하지 않았던 처리됩니다.

는 가장 좋은 방법은 무엇입을 위해 내 List<T> 을 정렬할 수 있?

내가 심는것을 해야 할 것이로 지정하는 기능 OnSorting 특성,즉:

OnSorting = "MySortingMethod"
도움이 되었습니까?

해결책

당신의 답변에 정렬됩니다.저는 LINQ 정렬하는 데 도움이 동적이다.이후 그리드 알고 있는지 여부를 정렬하 ASC 또는 DESC 고 있는 분야,나는 사용 LINQ 표현이다.식을 수행렬,그리고 나는 단순히 묶 그 결과를 내버.

내가 의심 jQuery 방법이 될 것이 더 빠르고,없을 필요로 가득하십시오

using System.Linq.Expressions;

public SortDirection GridViewSortDirection
{
    get
    {
        if (ViewState["sortDirection"] == null)
            ViewState["sortDirection"] = SortDirection.Ascending;

        return (SortDirection)ViewState["sortDirection"];
    }
    set { ViewState["sortDirection"] = value; }
}

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    //re-run the query, use linq to sort the objects based on the arg.
    //perform a search using the constraints given 
    //you could have this saved in Session, rather than requerying your datastore
    List<T> myGridResults = PerfomSearch();


    if (myGridResults != null)
    {
        var param = Expression.Parameter(typeof(T), e.SortExpression);
        var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param);


        if (GridViewSortDirection == SortDirection.Ascending)
        {
            myGridView.DataSource = myGridResults.AsQueryable<T>().OrderBy(sortExpression);
            GridViewSortDirection = SortDirection.Descending;
        }
        else
        {
            myGridView.DataSource = myGridResults.AsQueryable<T>().OrderByDescending(sortExpression);
            GridViewSortDirection = SortDirection.Ascending;
        };


        myGridView.DataBind();
    }
}

다른 팁

정-당신은 처리해야합니다 onsorting,목록을 정렬하고 다시 바인딩.

또는 당신이 볼 수있는 처리에 정렬 클라이언트 측면을 사용하는 javascript 와 같은 프레임워크 jQuery.

는 경우 이 오류가 발생할 수 있습니다.

데이터 소스를 지원하지 않는 서버쪽 페이징

도 추가 .ToList<T>() 검색어:

if (e.SortDirection == SortDirection.Ascending)
{
    GridViewTrackerLoans.DataSource = myGridResults.AsQueryable<T>().OrderBy(sortExpression).ToList<T>();
}
else
{
    GridViewTrackerLoans.DataSource = myGridResults.AsQueryable<T>().OrderByDescending(sortExpression).ToList<T>();
};

를 작성할 수 있습니다 비교한 귀하의 개체:

private int CompareObject(YourObject object1, YourObject object2)
{
    int iReturnValue = 0;
    if ((object1 != null) && (object2 != null) &&
        (object1.SomeField != object2.SomeField))
    {
        iReturnValue = (object1.SomeField > object2.SomeField) ? 1 : -1;
    }
    return iReturnValue;
}

그 때에 귀하의 정렬 이벤트 전달에 비교하는 기능으로 귀하의 개체를 정렬 루틴(가정하고 당신이 무언가가 다음과 같 목록).

// Your list of data from the session or viewstate or whereever you have it stored.
lstObjects.Sort(CompareObject);

당신은 지금 정렬된 목록을 그래서 다시 바인딩니다.

올바른를 처리해야 합 OnSorting 이벤트 설정 AllowSorting 속성을 true 로 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top