0

我在Lighswitch应用程序中使用数据网格。网格具有每列可能性来过滤列。感谢lsEnhancedTableLightswitch加载所有数据或同步运行异步方法

现在我正在向Web api控制器发送一个ajax请求,其中包含要导出的客户的ID列表。它可以工作,但有很多数据,所以速度非常慢,因为我必须关闭数据分页以获取所有可见的客户ID,以便遍历VisualCollection。

为了优化这个,我必须打开数据分页到50条记录,以便初始加载速度很快,并将数据加载到保存/导出到excel按钮。

可能的解决方案:

  • 加载数据的保存按钮点击的所有数据。为此,我必须以某种方式加载所有项目,然后才能遍历集合。

由于loadMore是异步的,下面的代码会锁定UI线程。如何同步加载所有数据?理想情况下,我想使用msls.showProgress进行某种进度视图。

while(3<4) 
    { 
     if (screen.tblCustomers.canLoadMore) { 
      screen.tblCustomers.loadMore(); 
     } 
     else 
      break; 
    } 

var visibleItemsIds = msls.iterate(screen.tblCustomers.data) 
         .where(function (c) { 
          return c; 
         }) 
  • 第二条本办法将打开页面,并通过刚刚由用户应用到Web API控制器,所以我可以查询数据库,并仅返回过滤记录的过滤器。但我不知道该怎么做。

  • 第三种方法是我现在正在使用的方法。关闭分页 - >遍历视觉集合,获取客户id,将它们传递给控制器​​并返回一个过滤的excel。有很多记录时,这不起作用。

  • 遍历服务器端过滤的集合?我不知道Lighswitch有没有办法做到这一点?

+0

第三个选项可以在javascript中实现客户端。 – Kris

回答

0

这里是客户端JavaScript的一个选项。

//首先构建OData过滤器字符串。

var filter = "(FieldName eq " + msls._toODataString("value", ":String") + ")"; 

//然后查询数据库。

myapp.activeDataWorkspace.ApplicationData.[TableName].filter(filter).execute().then(function (result) { ... });