页面项不能正确显示DomainCollectionView和自定义DomainService



我正在开发一个RIA服务应用程序,并且在服务器端分页和在DataGrid中显示分页项方面存在问题。我使用的是自定义DomainService,其中PageIndex &PageSize与几个过滤器参数一起通过Query传递。

问题是我的第一页结果显示正确,但是当我转到下一组结果时,我的项目被添加到列表的末尾,而不是仅仅显示从服务器返回的新结果。例如,我的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;
}

注意,我在PortalCountAll方法返回时赋值TotalItemCount。

为了完整起见,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时,显示当前页面结果的正确方法是什么?

当使用不支持LINQ的自定义ORM时,您可以(并且应该)传递PageIndex和PageSize。它允许您根据ORM进行分页,但也会使分页稍微复杂化。您要么需要重写DomainService。计数或添加totalCount out参数。

然而,在您的情况下,看起来错误是您已经将EntitySet (_context.PortalStudies)传递给DCV构造函数,而不是EntityList (_entityList)。

相关内容

  • 没有找到相关文章

最新更新