У меня проблема с сортировкой Gridview, которая похожа на другие, но я привязываюсь к объекту коллекции, а не к таблице данных.
Существующие бизнес-правила и уровни доступа к данным приложения следуют шаблону наличия объекта и, если вам нужна коллекция объектов этого типа, иметь другой класс, наследующий CollectionBase и реализующий IBindingList.
Для настольных приложений было легко привязать данные сетки к одному из этих объектов, и не было никаких проблем с включением сортировки столбцов. На уровне представления настольного приложения все было «в состоянии».
Теперь этот код перемещается в новое веб-приложение (ASP.NET 2.0, страницы VB с кодом).
Я поиграл с тем, что мне нужно было сделать, чтобы только некоторые столбцы коллекции отображались в виде сетки, и вид сетки выглядел довольно неплохо. Когда я включил «разрешить сортировку», именно тогда обнаружились проблемы.
Я получаю сообщение об ошибке из-за отсутствия метода .Sorting и т. Д. При исследовании этого я обнаружил все виды решений, которые легко реализовать с помощью dataviews , если мой источник был таблицей данных. Но это не так - это коллекция. Я попытался «дешево выстрелить» из источника данных, преобразовав коллекцию в поток памяти XML, и они пытались .ReadXML вернуться в набор данных, но это не сработало [Корневой элемент отсутствует, ошибка была, насколько я понял, в наборе данных. ReadXml (ioTemp), где ioTemp - это System.IO.MemoryStream, используемый в сериализаторе xml].
Из-за старых настольных приложений мне никогда не приходилось беспокоиться о сортировке коллекции, поскольку gridview обрабатывал ее после загрузки. Фактически, это «стандарт», когда коллекции .SortProperty, .SortDirection и .ApplySort все через NotSupportedExceptions (я унаследовал этот код от давно ушедших программистов).
Существует ли простой способ преобразования коллекции в таблицу данных или способ сортировки коллекции без необходимости каждый раз возвращаться в базу данных? Источники объектных данных не будут работать из-за запутанных правил построения объектов - мастера VS2005 просто не могут справиться с тем, что нам нужно сделать (получение данных из нескольких таблиц условно для создания объекта).
Заранее спасибо.