1

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

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

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

4

2 に答える 2

3

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

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
    }
}
于 2008-10-03T15:48:13.577 に答える
0

データをバインドするときに null をオーバーライドして、代わりに 0 を配置することもできます。あなたの答えははるかに優れています。:)

Compare 演算子をオーバーライドするカスタム型を作成することもできます。しかし、それはあなたが上に持っているものを複製する(そして複雑にする)だけです.

于 2008-10-03T15:56:53.577 に答える