2013-04-23 81 views
2

我有一個具有唯一標識符的Kendo網格,當我單擊一行時,我希望它在第二個網格中顯示細節。這兩個數據集都從鏈接到數據庫的php文件填充。所以第二個網格顯示了該唯一標識符的所有細節。Kendo UI - 如何讓SQL填充網格過濾器第二個SQL填充網格點擊?

一格:

$(document).ready(function() { 
       $("#grid").kendoGrid({ 
        dataSource: { 
         pageSize: 100, 
         transport: { 
          read: "http://localhost:8888/stationslist.php", 
          dataType: "json" 
         }, 
         schema: { 
          data: "data", 
          total: function(response) { 
           return $(response.data).length; 
           } 
          } 
          }, 


        selectable: "single", 
        sortable: { 
         mode: "multiple", 
         allowUnsort: true 
        }, 
        change: function (arg) { 
         var selected = $.map(this.select(), function (item) { 
          return $(item).find('td').first().text(); 
          }); 
          } 

二格:

change : function (e) { 
    var item = this.dataItem(this.select()); 
    populateGrid2(item); 
} 

如果我們從一開始作爲item的所有信息:

$(document).ready(function() { 
       $("#grid2").kendoGrid({ 
        dataSource: { 
         pageSize: 100, 
         transport: { 
          read: "http://localhost:8888/spots.php", 
          dataType: "json" 
         }, 
         schema: { 
          data: "data", 
          total: function(response) { 
           return $(response.data).length; 
           } 
          } 
          } 
+0

filter文檔,你所看到的這個實現? http://demos.kendoui.c​​om/web/grid/detailtemplate.html – Mate 2013-04-23 23:55:59

+0

是的,我有。但我不希望它出現在同一個網格中,我希望它位於一個單獨的網格中。 – 2013-04-23 23:58:10

回答

1

第一個grid爲實現change處理器選定的行(您不需要複雜的$.map),然後調用第二個函數來填充第二個grid

每次選擇一個原料但重新填充時,您應該考慮不重新創建grid。如果是這樣,初始化grid2爲:

$("#grid2").kendoGrid({ 
    dataSource : { 
     pageSize : 100, 
     transport: { 
      read  : { 
       url  : "http://localhost:8888/spots.php", 
       dataType: "json" 
      }, 
      parameterMap: function (arg, op) { 
       if (op === "read") { 
        return { id: arg.id } 
       } 
      } 
     }, 
     schema : { 
      data : "data", 
      total: function (response) { 
       return $(response.data).length; 
      } 
     } 
    }, 
    autoBind: false 
}); 

如果我們說沒有自動綁定(不讀數據,直到我們明確地說出來),然後定義parameterMap功能用於管理參數(發送id到服務器)。

現在,功能populateGrid2就是:

function populateGrid2(item) { 
    var ds = $("#grid2").data("kendoGrid").dataSource; 
    ds.filter({ field: "Identifier", operator: "eq", value: item.Identifier }); 
} 

簡單,優雅,高效!

你可以找到here

+0

,它的工作原理是它會導致第二個網格在第一個網格上每次單擊時填充和刷新。但是,它不會過濾第二個網格。它只是顯示一切。每個數據源都有一個名爲「標識符」的字段,該字段應該是過濾字段。您發佈的哪部分內容會導致過濾? – 2013-04-24 13:13:46

+0

我認爲過濾是由服務器完成的。所以你想要的是過濾在客戶端完成。正確? – OnaBai 2013-04-24 14:14:09

+0

正確。這些spots.php只包含一切。所以當你點擊時,它會在那個時候過濾它。 – 2013-04-24 14:33:20