Null 許容整数を含む列でグリッドビューを並べ替えるにはどうすればよいですか?

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

  •  03-07-2019
  •  | 
  •  

質問

1 つの列が null 許容整数を含むオブジェクト プロパティにバインドされている GridView があります。SortExpression をプロパティの名前に設定すると、すべての行に値が含まれている限り、並べ替えは完全に機能します。ただし、行に null が含まれている場合は、例外が発生します。

System.InvalidOperationException :配列内の 2 つの要素の比較に失敗しました。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

Null ケースを処理するために並べ替えまたは比較ロジックをカスタマイズするにはどうすればよいですか?

役に立ちましたか?

解決

Nullable 型は、Nullable 型を比較す​​るための比較メソッドを公開するため、解決策は、グリッドビューの並べ替えロジックをオーバーライドし、比較を手動で指定することです。

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