Lightswitch加载所有数据或同步运行异步方法

时间:2016-02-13 14:02:55

标签: javascript c# visual-studio-lightswitch lightswitch-2013 lightswitch-2012

我在Lighswitch应用程序中有一个包含数据的网格。网格在每个列都具有过滤列的可能性。感谢lsEnhancedTable

现在我正在向web api控制器发送一个ajax请求,其中包含我要导出的Customers列表。它工作但是有很多数据它很慢,因为我必须关闭数据的分页以获得所有可见的客户id,所以我可以迭代VisualCollection。

为了优化这一点,我必须将数据的分页打开到50条记录,这样初始加载速度很快,并将数据加载移动到save / export to excel按钮。

可能的解决方案:

  • 点击保存按钮,将所有数据加载数据。要做到这一点,我必须以某种方式加载所有项目,然后才能迭代收集。

下面的代码锁定了UI线程,因为loadMore是异步的。如何同步加载所有数据?理想情况下,我想使用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控制器,这样我就可以查询数据库并只返回过滤后的记录。但我不知道该怎么做。

  • 第三种方法是我现在正在使用的方法。关闭分页 - &gt;迭代视觉集合,获取客户ID,将它们传递给控制器​​并返回过滤后的Excel。当有大量记录时,这种方法效果不佳。

  • 在服务器端迭代过滤集合?我不知道Lighswitch是否有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这是客户端javascript的选项。

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

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

//然后查询数据库。

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