무효 정수를 포함하는 열별로 GridView를 정렬하는 방법은 무엇입니까?
문제
하나의 열이 귀중한 정수가 포함 된 객체 속성에 묶인 그리드 뷰가 있습니다. 나는 Sortexpression을 속성의 이름으로 설정하고 모든 행에 값이 포함 된 한 정렬은 완벽하게 작동합니다. 그러나 행이 NULL이 포함되어 있으면 예외가 발생합니다.
System.InvalidOperationException : 배열에서 두 가지 요소를 비교하지 못했습니다. 객체 참조 객체의 인스턴스로 설정되지 않습니다.
널 케이스를 처리하기 위해 정렬 또는 비교 로직을 사용자 정의하려면 어떻게해야합니까?
해결책
Nullable 유형은 Nullable 유형을 비교하기위한 비교 방법을 노출 시키므로 솔루션은 GridView 정렬 로직을 무시하고 수동으로 비교를 지정하는 것입니다.
gridview.Sorting += new GridViewSortEventHandler(gridView_Sorting);
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
// Only add custom handling for the sort expression on the
// Nullable<int> column
if (e.SortExpression == "MySortExpression")
{
// Convert datasource to a List<T>
list.Sort(new Comparison<MyObjectType>(delegate(MyObjectType item1, MyObjectType item2)
{
return Nullable.Compare<int>(item1.NullableIntProp, item2.NullableIntProp);
}));
// Bind the sorted list back to the gridview
}
else
{
// delegate to the gridview to handle its own sorting
}
}
다른 팁
데이터를 바인딩 할 때 NULL을 대신하여 0을 배치 할 수도 있습니다. 당신의 대답은 훨씬 낫습니다. :)
또한 비교 연산자를 무시하는 사용자 정의 유형을 만들 수도 있습니다. 그러나 그것은 당신이 위에서 가지고있는 것을 복제하고 복잡하게 할 것입니다.
제휴하지 않습니다 StackOverflow