Как отсортировать gridview по столбцу, содержащему целое число с нулевым значением?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Система.Исключение 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
    }
}

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top