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) { ... });