我有一個GridView,其中一列綁定到包含可爲空的整數的對象屬性。我將SortExpression設置爲屬性的名稱,只要所有行都包含值,就可以完美排序。但是,如果有任何行包含null,則會發生異常:如何按包含可爲空的整數的列對gridview進行排序?
System.InvalidOperationException:無法比較數組中的兩個元素。你調用的對象是空的。
如何定製排序或比較邏輯來處理空情況?
我有一個GridView,其中一列綁定到包含可爲空的整數的對象屬性。我將SortExpression設置爲屬性的名稱,只要所有行都包含值,就可以完美排序。但是,如果有任何行包含null,則會發生異常:如何按包含可爲空的整數的列對gridview進行排序?
System.InvalidOperationException:無法比較數組中的兩個元素。你調用的對象是空的。
如何定製排序或比較邏輯來處理空情況?
可空類型公開用於比較空類型的比較方法,因此該解決方案是重寫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。你的答案要好得多。 :)
您還可以製作一個覆蓋比較運算符的自定義類型。但是這隻會複製(並且複雜化)你上面的內容。