简体   繁体   中英

Kendo Grid keydown event

I have initiated a Kendo Grid using Kendo directives. How do I catch the keydown/keypress event of the grid? My final objective is to populate a grid column based on user input of another column. For example, populate the phone number when the first name is entered. For that I believe I have to use the Kendo Grid edit and the keypress events and do a search on the user input, unless there's a better way to do it. Is this possible?

This is how I initialized the grid:

<section id="dashboard-view" class="mainbar" data-ng-controller="dashboard as vm">
   ....
   <div kendo-grid="vm.testGrid" k-options="vm.testGridOptions" k-rebind="vm.testGridDataSource.data" k-on-edit="vm.onEdit(kendoEvent)"></div>
   ....
</section>

Options defined in my JavaScript file:

vm.testGridOptions = {
  columns: [
    { field: "Id", title: "ID" },
    { field: "FirstName", title: "First Name" },
    { field: "LastName", title: "Last Name" },
    { field: "Phone", title: "Phone" },
    { command: ["destroy"] }
  ],
  toolbar: ["create", "save", "cancel"],
  dataSource: vm.testGridDataSource,
  editable: {
    createAt: "bottom"
  },
  height: 400,
  autoBind: false
};
vm.onEdit = function (e) {
    //if grid column == Id && keypressed == Tab key
    //search
};

The grid is on batch edit mode.

You can find current column/field name based on the index. Then filter the dropdown present in column next to it: (this is just a sample code, please replace DOM ids with your code)

vm.onEdit = function (e) {
    var header = vm.thead;//grid header
    var index = vm.cellIndex(e.container);//current cell index

    var th = $(header).find("th").eq(index);
    var colName = $(th).data("field");//fieldname for current cell  

    var dataItem = e.model;//row model

    if(colName=='LastName')
    {
         var phoneDropDown =  e.container.find("#PhoneDropDownId").data("kendoDropDownList");
         if (phoneDropDown) {
               phoneDropDown.dataSource.filter({ field: "Phone", operator: "eq", value: e.model.LastName });
               }
    }
}; 

Since the Kendo Grid doesn't have a native event for this I used the JQuery onBlur event.

vm.onEdit = function (e) {
    alert("Edit event fired");
    $('input.k-input.k-textbox').blur(function (f) {
        alert("Blur event fired");
    }
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM