У меня есть приложение-служба 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<PortalStudy> GetPortalStudy(string patientsName, string patientId, string accessionNumber, int startIndex, int pageSize)
{ }
Я бы предположил, что проблема заключается в том, как я настраиваю _entityList и с назначением результатов в методе LoadComplete ():
_entityList.Source = op.Entities;
Похоже, что во всех примерах на основе LINQ это назначение позволяет отображать в DataGrid только текущие результаты.По какой-то причине это не так при использовании пользовательского метода запроса.
Мне интересно, каков предпочтительный способ очистки DataGrid при изменении страницы?Я знаю, что могу просто вызвать _context.PortalStudies.Clear (), чтобы очистить результаты, прежде чем я сделаю запрос, но это приводит к появлению вспышки на странице с очищенными элементами, которые не заполняются до тех пор, пока запрос не вернется с сервера.Как правильно отображать только текущую страницу результатов при использовании пользовательского DomainService?