2008-10-03 64 views
1

我有一個GridView,其中一列綁定到包含可爲空的整數的對象屬性。我將SortExpression設置爲屬性的名稱,只要所有行都包含值,就可以完美排序。但是,如果有任何行包含null,則會發生異常:如何按包含可爲空的整數的列對gridview進行排序?

System.InvalidOperationException:無法比較數組中的兩個元素。你調用的對象是空的。

如何定製排序或比較邏輯來處理空情況?

回答

3

可空類型公開用於比較空類型的比較方法,因此該解決方案是重寫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 
    } 
} 
0

你也可以覆蓋空時綁定數據,取而代之的是0。你的答案要好得多。 :)

您還可以製作一個覆蓋比較運算符的自定義類型。但是這隻會複製(並且複雜化)你上面的內容。

相關問題