정렬트 경 데이터 바인딩 컬렉션하거나 객체 목록
-
03-07-2019 - |
문제
나는버 설정 방법은 다음과 같습니다.
- 에 바인딩
List<T>
코드에서 뒤에(나를 사용하여 내 사용자 지정 BOL) - 아 DataSource 개체 HTML 페이지에
- 정렬에서 각각하는 열이 나는 선택(이하
SortExpression
s 은 모두가 올바르게 설정)
그러나 나는 다음과 같은 오류 메시지:
의트'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 로 설정할 수 있습니다.
제휴하지 않습니다 StackOverflow