2016-11-30 2 views
1

это моя Кендо сеткакак получить выбранный ряд и его DataItem в KendoUI

dataSource = new kendo.data.DataSource({ 
        transport: { 
         read: { 
          url: "/Actionables/GetAccessibleTemplateForAssets/", 
          data: { assetID: '@Model.AssetID', types: '@Model.TypeName' }, 
          dataType:"Json", 
          type: "GET" 
         }, 
        },      
        schema: { 
         model: { 
          id: "ID", 
          fields: { 
           ID: { type: "int" }, 
           Name: { type: "string" }, 
           Description: { type: "string" }, 
           Types: { type: "string" }, 
           EntryGroupID: {type:"int"} 
          } 
         } 
        }, 
        pageSize: 3, 

       }); 
       $("#grid").kendoGrid({ 
        dataSource: dataSource, 
        dataBound: onDataBound, 
        autoSync: true, 
        serverPaging: true, 
        serverSorting: true, 
        serverFiltering: true, 
        height: 250, 
        sortable: true, 
        filterable: { 
         mode: "row" 
        }, 
        pageable: { 
         refresh: true, 
         pageSizes: true, 
         buttonCount: 5 
        }, 
        columns: 
        [{ 
         field: "Types", 
         width: 100, 
         title: "Type", 
         template: "<image src='/Content/Images/Pins/#:data.Types#.png'/>", 
         filterable: false 

        },{ 
         field: "Name", 
         width: 150, 
         title: "Name", 
         filterable: { 
          cell: { 
           operator: "contains" 
          } 
         } 
        }, { 
         field: "Description", 
         width: 150, 
         title: "Description", 
         filterable: { 
          cell: { 
           operator: "contains" 
          } 
         } 
        },{ 
         command: [ 
          { name: "remove", text: "&nbsp;", click: removeTab, iconClass: "fa fa-trash" }, 
          { name:"view", text: "&nbsp;", click: addTab , iconClass: "fa fa-plus-circle"}], 
          title: "Action", 
          width: 100, 


        }], 
        editable: { 
         mode:"popup"        
        }, 
       }).data("kendoGrid"); 


       wnd = $("#details").kendoWindow({ 
        title: "View Tab", 
        modal: true, 
        visible: false, 
        resizable: false, 
        width: 300 
       }).data("kendoWindow"); 
       detailsTemplate = kendo.template($("#ViewDetails").html()); 

это будет вызвано, когда пользователь нажал знак «+» в командной колонке. он открывает всплывающее окно.

function addTab(e) { 
    e.preventDefault(); 
    var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
    wnd.content(detailsTemplate(dataItem)); 
    wnd.center().open(); 
} 

всплывающее окно содержит две кнопки, на этой кнопки мыши случае функция OpenRecentlyClosed() будет вызван.

<script type="text/x-kendo-template" id="ViewDetails"> 
<div id="details-container"> 
    <button id="oldEntryGroup" class="k-button" onclick="OpenRecentlyClosed()">Open recently closed</button> 
    <br /><br /> 
    <button id="NewEntryGroup" class="k-button">Open new</button> 
</div> 

ниже функции Я пытаюсь получить доступ к DataItem из щелкнули/выбранной строки. пожалуйста помоги. спасибо заранее

function OpenRecentlyClosed() { 
    //trying to access dataItem here.. please help 
    //var grid = $("#grid").data("kendoGrid"); 
    //var dataItem = grid.dataItem(grid.select()); 
    $.ajax({ 
      cache: false, 
      type: "GET", 
      url: "some url", 
      data: {x: dataItem.ID},// need to pass value of dataItem.ID 
      success: function() { 
       //my code 
      } 
     }); 

} 

ответ

5

событие захвата строки нажмите и получить данные из этой строки:

$(document).on("click", "#grid tbody tr", function (e) { 
    var element = e.target || e.srcElement; 
    var data = $("#grid").data("kendoGrid").dataItem($(element).closest("tr")); 
}); 
+0

спасибо @Kyle ваш код работает, но я сделал незначительные изменения вместо объявляя 'уаг data' внутри функции я объявлены до' $ (документ) .ready (функция()) ', так что я могу получить доступ к данным когда бы я ни за Хотел. –

+0

Рад, что это сработало для вас! – Kyle

0

Пожалуйста, попробуйте ниже фрагмент кода.

function OpenRecentlyClosed() { 

var grid = $("#grid").data("kendoGrid"); 
var selectedRows = grid.select(); 


selectedRows.each(function(index, row) { 
    var selectedItem = grid.dataItem(row); 
    alert(selectedItem.ID); 
}); 

... 
... 
} 

Сообщите мне, если возникнут проблемы.

+0

'var selectedRows = grid.select()' получение TypeError 'r' не определено –

0

Я думаю, вам нужно сохранить ссылку на выбранный элемент данных в вашей функции javacript addTab.

function addTab(e) { 
e.preventDefault(); 
var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
wnd.selectedDataItem = dataItem; 
wnd.content(detailsTemplate(dataItem)); 
wnd.center().open(); 
} 

Затем в OpenRecentlyClosed вы можете получить доступ к элементу dataItem.

function OpenRecentlyClosed() {  
var dataItem = wnd.selectedDataItem; 
$.ajax({ 
     cache: false, 
     type: "GET", 
     url: "some url", 
     data: {x: dataItem.ID},// need to pass value of dataItem.ID 
     success: function() { 
      //my code 
     } 
    }); 
} 
+0

Спасибо, Мартин Д. Ваш ответ также работает, к сожалению, я могу выбрать только один ответ. –