2012-11-22 121 views
5

我有以下情形:KendoUI:點擊按鈕後,網格數據重置爲第一頁

在我的網頁我有一個網格(帶分頁)界到數據源。當我點擊按鈕「Extract」時,網格會被填充(通過Web服務讀取分頁數據)。 然後我通過網格分頁選擇「第2頁」。 Web服務再次被調用以返回數據。

現在:我想單擊「Extract」一次,重新加載並顯示第一頁上的數據。我不確定哪個是最好的方法。

我想對服務進行一次調用(使用輸入參數),並在網格中重新設置分頁索引。

我現在用下面的代碼:

$("#btnExtract").bind("click", function(e) { 
    var grid = $("#section-table").data("kendoGrid"); 
    grid.dataSource.read({parameter: "value"}); 
    grid.dataSource.page(1); 
}); 

但它實際上使得兩次調用服務。

回答

14

如果你正在做服務器端分頁,它應該足夠做grid.dataSource.page(1)因爲這將調用read完全按照你已經實現。

+0

謝謝,但如果我還想發送參數te請求? –

+0

您可以通過創建新的數據源URL將參數添加到'$ grid.data(「kendoGrid」)。dataSource.transport.options.read.url'屬性。 –

+0

它工作。謝謝你的簡單解決方案 –

0

爲您的Kendo網格DataSource讀取操作定義一個parameterMap,如下所示,它將進入傳輸元素。然後調用grid.dataSource.page(1),這將調用讀取,你應該排序。

new kendo.data.DataSource({  
transport: { 
        read: { 
          // ur read 
          }, 
      parameterMap: function (o, operation) { 
         var output = null; 
         switch (operation) { 
            case "create": 
            break; 
           case "read": 
            output = {parameter: "value"}; 
            break; 
           case "update": 
            break; 
           case "destroy": 
            break; 
         } 
        return output;    }}}); 
+0

這是否意味着我必須在代碼中定義輸入參數對象(我的意思是'{參數:「值」}')在外部對象,某處可以全局訪問?我正在使用「read()」,僅僅是因爲我可以更新parameterMap中的輸入,只是將數據發送給它。 –

2

要執行只有你應該使用數據源的query方法單個請求。它允許你創建的不同方法,如過濾器/頁組合/排序等

例如:

dataSource.query({ page: 5, pageSize: 20, sort: { field: "orderId", dir: "asc" } }); 
11

出於某種原因,如果頁面被設置爲1,並且再次設置爲1 ,它會做一個閱讀。如果它不是1,而您將其設置爲1,則只會進入該頁面而不進行讀取。如果您使用

$("#btnExtract").bind("click", function(e) { 
    var grid = $("#section-table").data("kendoGrid"); 
    grid.dataSource.query({ page: 1, parameter: "value"}); 
}); 

:因此,要回答你的問題,你可以使用此代碼:

if (grid.dataSource.page() != 1) { 
    grid.dataSource.page(1); 
} 
grid.dataSource.read({parameter: "value"}); 
+1

這個答案適用於我,標註爲解決方案的評論沒有。 – mgmedick

+2

絕對正確的答案 – Fabio

+0

在'else'塊中拋出'grid.dataSource.read({parameter:「value」});',以防止在頁面不是1時雙擊到您的服務器。 – MalibuCusser

2

使用DataSource.query()方法傳遞的頁碼和您的自定義輸入參數服務器端分頁和排序,那麼你可能還需要包括該信息以及:

$("#btnExtract").bind("click", function(e) { 
    var grid = $("#section-table").data("kendoGrid"); 

    var queryParams = { 
     page: 1, 
     pageSize: grid.dataSource.pageSize(), 
     sort: grid.dataSource.sort(), 
     group: grid.dataSource.group(), 
     filter: grid.dataSource.filter(), 
     parameter: "value" 
    }; 

    grid.dataSource.query(queryParams); 
}); 
相關問題