AspxGridView ObjectDataSource сортировка

Я портирую из ASP.NET GridView в DevExpress AspxGridView, и я использую тот же ObjectDataSource, но теперь, когда я нажимаю на заголовок, он выдает:

«Источник данных 'xxx' не поддерживает сортировку с данными IEnumerable. Автоматическая сортировка поддерживается только с DataView, DataTable и DataSet».

Но это хорошо сработало для GridView, поэтому я сомневаюсь, что это действительно ошибка «xxx». На старом gridview подкачка и сортировка были в порядке. Теперь разбиение на страницы по-прежнему работает (когда я использую «DataSourceForceStandardPaging»).

Как заставить работать с AspxGridView?


person SmartK8    schedule 10.09.2013    source источник
comment
вы можете использовать customorting для реализации сортировки в aspxgridview   -  person Niranjan Singh    schedule 11.09.2013


Ответы (1)


Вы можете реализовать сортировку ASPxGridView, используя настраиваемые правила, необходимо установить свойство столбца Settings.SortMode на "Custom" и обработать событие ASPxGridView.CustomColumnSort (как показано в соответствующем разделе ). Однако параметр Settings.AllowSort отключать не следует.

Пример пользовательской сортировки:

RepositoryItemHyperLinkEdit hlnkEditor;
private void GridCustomSortTest_Load(object sender, EventArgs e)
{
    string[] months = new string[] { "January", "February", "March", 
        "April", "May", "June", "July", "August", "September", 
        "October", "November", "December" };
    hlnkEditor = new RepositoryItemHyperLinkEdit();
    //hlnkEditor.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;

    grid.DataSource = months;
    grid.RefreshDataSource();
    gridView1.Columns[0].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
    gridView1.Columns[0].ColumnEdit = hlnkEditor;
    gridView1.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(gridView1_CustomColumnSort);


}

void gridView1_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
    e.Result = Comparer<int>.Default.Compare(e.ListSourceRowIndex1,
       e.ListSourceRowIndex2);

    e.Handled = true;
}

Надеюсь на эту помощь ..

Изменить: для сортировки на стороне сервера и разбиения по страницам просмотрите пример - Привяжите сетку к ObjectDataSource с помощью EnablePaging и проверьте также ссылки.

Дополнительные ссылки:
Как получить сетку для сортировки моего ObjectDataSource на сервере ?
Передача выражений разбиения на страницы / сортировки / группировки / фильтрации Gridview в бизнес-логика Выберите методы
ASPxGridView - разбиение на страницы и фильтрация ObjectDataSource
Сравнение производительности XPO и Entity Frameworks, а также ObjectDataSource

Привязка к большим данным:
привязка к данным
Привязка к большим данным (режим сервера базы данных)
Возможная реализация интерфейса IListServer для работы в режиме сервера

person Niranjan Singh    schedule 11.09.2013
comment
Извини, здесь была ночь. Будет ли это работать с разбиением по страницам или будет сортироваться только фактическая страница (клиентская сортировка)? Мне нужна сортировка на стороне сервера. Раньше это работало хорошо. Порядок столбцов был отправлен в метод GetData, и я отсортировал данные на стороне сервера. Это не изменилось, но AspxGridView выдает это странное сообщение. - person SmartK8; 11.09.2013
comment
Ты здесь? Как лучше реализовать серверную сортировку (у меня 100000 строк)? - person SmartK8; 12.09.2013
comment
Проверяю. В то время я читал «Привязать сетку к ... статье». Думаю, мне нужно преобразовать объекты в DataTable. Потому что я не буду отправлять DT через границу клиент / сервер (он сериализуется до размера xml = ›~ 10x). Поэтому мне нужно построить его на стороне клиента. Мне непонятно, почему DT работает, а простой список - нет (в основном сортировка). Так же возвращаю уже отсортированную порцию данных (страницу). Наверное, где-то if (источник - DataTable) где-то. - person SmartK8; 12.09.2013
comment
Я попробовал IListSource, и он вернул только первую страницу (другие были пустыми), но он не отреагировал, когда я щелкнул заголовок столбца - ›т.е. сортировка. Я пробовал ObjectDataSource (преобразование вывода в DataTable). Пейджинг по-прежнему работает нормально, и сортировка не вызывает исключения, но также не реагирует на щелчок по заголовку. Стоит ли вызывать его как-то вручную? (когда я нажимаю на сортировку, а затем на некэшированную страницу, он запрашивает данные с обновленным / правильным параметром orderBy) - person SmartK8; 12.09.2013
comment
Сетка выполняет только сортировку на стороне клиента, я все еще не могу заставить ее запрашивать данные страницы при нажатии заголовка столбца. - person SmartK8; 12.09.2013
comment
В ПОРЯДКЕ. Некоторый прогресс, мне удалось отремонтировать реализацию IListServer (отключил режим пользовательской сортировки). И еще кое-что по оптимизации. Теперь он правильно отображает данные, а также реагирует на действия конечного пользователя по сортировке. - person SmartK8; 12.09.2013