Страничные элементы не отображаются должным образом с DomainCollectionView и пользовательским DomainService - PullRequest
1 голос
/ 14 июля 2011

У меня есть приложение-служба RIA, которое я разрабатываю, и у меня проблемы с подкачкой на стороне сервера и отображением элементов с подкачкой в ​​DataGrid.Я использую собственный DomainService, где PageIndex & PageSize передается через Запрос вместе с несколькими параметрами фильтра.

Проблема в том, что моя первая страница результатов отображается правильно, но когда я перехожу к следующему набору результатов, мои элементы добавляются в конец списка, а не просто отображаются новые результаты, возвращенные с сервера.,То есть моя DataGrid отображает все совокупные объекты, возвращенные с сервера, а не просто отображает последнюю страницу возвращенных результатов.

Сначала я использую DomainCollectionView и DomainCollectionViewLoader:


 _context = new StudyQueryContext();
_entityList = new EntityList(_context.PortalStudies);
_loader = new DomainCollectionViewLoader(Load, LoadComplete);
PortalStudies = new DomainCollectionView(_loader, _context.PortalStudies);      

Тогда у меня есть довольно стандартные методы Load () и LoadComplete ():


public LoadOperation Load()
{
    if (IsLoading)
    {
        return null;
    }

    IsLoading = true;
    EntityQuery q = _context.GetPortalStudyQuery(PatientsName, PatientId, AccessionNumber, PortalStudies.PageIndex, PortalStudies.PageSize);           
    return _context.Load(q);
}

private void LoadComplete(LoadOperation op)
{
    if (op.HasError)
    {
        System.Windows.MessageBox.Show(op.Error.ToString(), "Search Error", System.Windows.MessageBoxButton.OK);
        op.MarkErrorAsHandled();
    }
    else if (!op.IsCanceled)
    {
        _entityList.Source = op.Entities;
        _context.PortalCountAll(PatientsName, PatientId, AccessionNumber, CountAllComplete, null);
    }

    IsLoading = false;
}

Обратите внимание, что я присваиваю TotalItemCount, когда возвращается метод PortalCountAll.

Только для полноты, подписьмоего метода DomainService Query заключается в следующем:


[Query]
public IEnumerable&ltPortalStudy> GetPortalStudy(string patientsName, string patientId, string accessionNumber, int startIndex, int pageSize)
{ }  

Я бы предположил, что проблема заключается в том, как я настраиваю _entityList и с назначением результатов в методе LoadComplete ():

_entityList.Source = op.Entities;  

Похоже, что во всех примерах на основе LINQ это назначение позволяет отображать в DataGrid только текущие результаты.По какой-то причине это не так при использовании пользовательского метода запроса.

Мне интересно, каков предпочтительный способ очистки DataGrid при изменении страницы?Я знаю, что могу просто вызвать _context.PortalStudies.Clear (), чтобы очистить результаты, прежде чем я сделаю запрос, но это приводит к появлению вспышки на странице с очищенными элементами, которые не заполняются до тех пор, пока запрос не вернется с сервера.Как правильно отображать только текущую страницу результатов при использовании пользовательского DomainService?

1 Ответ

1 голос
/ 18 июля 2011

Вы можете (и должны) передавать PageIndex и PageSize при работе с пользовательским ORM, который не поддерживает LINQ.Это позволит вам создавать страницы против ORM, но также немного усложнит пейджинг.Вам нужно либо переопределить DomainService.Count , либо добавить параметр totalCount out .

В вашем случае, однако, похоже, что ошибка заключается в том, что вы 'мы передали EntitySet (_context.PortalStudies) в конструктор DCV вместо EntityList (_entityList).

...