Как отсортировать gridview по столбцу, содержащему целое число с нулевым значением?
Вопрос
У меня есть 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.Ваш ответ намного лучше.:)
Вы также могли бы создать пользовательский тип, который переопределяет оператор сравнения.Но это просто дублировало бы (и усложнило) то, что у вас есть выше.