무효 정수를 포함하는 열별로 GridView를 정렬하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/167509

  •  03-07-2019
  •  | 
  •  

문제

하나의 열이 귀중한 정수가 포함 된 객체 속성에 묶인 그리드 뷰가 있습니다. 나는 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을 배치 할 수도 있습니다. 당신의 대답은 훨씬 낫습니다. :)

또한 비교 연산자를 무시하는 사용자 정의 유형을 만들 수도 있습니다. 그러나 그것은 당신이 위에서 가지고있는 것을 복제하고 복잡하게 할 것입니다.

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