Как отсортировать gridview по столбцу, содержащему обнуляемое целое число? - PullRequest
1 голос
/ 03 октября 2008

У меня есть GridView, где один столбец привязан к свойству объекта, содержащему обнуляемое целое число Я установил SortExpression на имя свойства, и сортировка работает идеально, если все строки содержат значение. Однако, если какие-либо строки содержат ноль, я получаю исключение:

System.InvalidOperationException: не удалось сравнить два элемента в массиве. Ссылка на объект не установлена ​​для экземпляра объекта.

Как настроить логику сортировки или сравнения для обработки нулевого регистра?

Ответы [ 2 ]

3 голосов
/ 03 октября 2008

Тип 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
    }
}
0 голосов
/ 03 октября 2008

Вы также можете переопределить ноль при привязке данных, поместив вместо этого 0. Ваш ответ намного лучше. :)

Вы также можете создать пользовательский тип, который переопределяет оператор сравнения. Но это просто дублирует (и усложняет) то, что у вас есть выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...