Hi,
I have a Kendo Detail Grid in which the Parent row contains the total percentage and the child row contains the individual percentages.
The Inner grid has Read/Create/Update and delete operations.
My requirements is when ever any of the operations performed in child grid, I need to update the total percentage column has to be updated in parent grid.
here is my code
<%@taglib prefix="shared" tagdir="/WEB-INF/tags"%>
<%@page import="java.util.HashMap"%>
<%@taglib prefix="kendo" uri="http://www.kendoui.com/jsp/tags"%>
<shared:header></shared:header>
<!DOCTYPE html>
<html>
<head>
<style>
html {
 font-size: 14px;
 font-family: Arial, Helvetica, sans-serif;
}
</style>
<title>Demo</title>
<link rel="stylesheet"
 href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<link rel="stylesheet" href="styles/layout-jsp.css" />
<link href="styles/kendo.common.min.css" rel="stylesheet">
<link href="styles/kendo.default.min.css" rel="stylesheet">
<!-- jquery and kendo javascript. jquery MUST be first. -->
<script src="js/jquery.min.js"></script>
<script src="js/kendo.all.min.js"></script>
</head>
<body>
  </div>
  <button type="submit" class="btn btn-default btn-class"
   id="submitbutton">Submit</button>
 </div>
 
 
 <%                
    HashMap<String, Object> data = new HashMap<String, Object>();
    data.put("employeeID", "#=employeeID#");
%>
 <div class="grid-class" id="grid-id">
  <kendo:grid id="parent-grid" name="parent-grid"
   detailInit="detailInit" detailExpand="DetailExpand" pageable="true"
   detailTemplate="grid-nested-id" sortable="true">
   <kendo:grid-pageable pageSizes="true"></kendo:grid-pageable>
   <kendo:dataSource pageSize="10">
    <kendo:dataSource-transport read="SubmitController">
     <kendo:dataSource-transport-parameterMap>
      <script>
            function parameterMap(options, operation) {
                console.log(options);
                return options;
            }
          </script>
     </kendo:dataSource-transport-parameterMap>
    </kendo:dataSource-transport>
   </kendo:dataSource>
   <kendo:grid-columns>
    <kendo:grid-column title="ID" field="employeeID" />
    <kendo:grid-column title="FirstName" field="employeeFirstName" />
    <kendo:grid-column title="LastName" field="employeeLastName" />
    <kendo:grid-column title="Percentage" field="percentage" />
   </kendo:grid-columns>
  </kendo:grid>
  <kendo:grid-detailTemplate id="grid-nested-id">
   <kendo:grid id="child-grid_#=employeeID#"
    name="child-grid_#=employeeID#" class="child-grid-class"
    save="onSave" pageable="true" sortable="true" editable="true"
    edit="onEdit" cancel="onCancel" change="onChange">
    <kendo:grid-editable mode="inline"
     confirmation="Are you sure you want to remove this item?" />
    <kendo:grid-toolbar>
     <kendo:grid-toolbarItem name="create" />
    </kendo:grid-toolbar>
    <kendo:grid-columns>
     <kendo:grid-column title="Employee ID" field="employeeID"
      width="90px" />
     <kendo:grid-column title="Product" field="productName"
      editor="productEditor" width="90px"></kendo:grid-column>
     <kendo:grid-column title="Activity" field="activityName"
      editor="activityEditor" width="150px"></kendo:grid-column>
     <kendo:grid-column title="Percentage" field="percentage"
      width="90px" />
     <kendo:grid-column title=" " width="250px">
      <kendo:grid-column-command>
       <kendo:grid-column-commandItem name="edit" text="modify" />
       <kendo:grid-column-commandItem name="destroy" />
      </kendo:grid-column-command>
     </kendo:grid-column>
    </kendo:grid-columns>
    <kendo:dataSource pageSize="10">
     <kendo:dataSource-transport>
      <kendo:dataSource-transport-create
       url="SubmitController?action=create" type="POST"
       contentType="application/json" />
      <kendo:dataSource-transport-read url="SubmitController" />
      <kendo:dataSource-transport-update
       url="SubmitController?action=update" type="POST"
       contentType="application/json" />
      <kendo:dataSource-transport-destroy
       url="SubmitController?action=destroy" type="POST"
       contentType="application/json" />
      <kendo:dataSource-transport-parameterMap>
       <script>
            function parameterMap(options, operation) {
                console.log(options);
                return options;
            }
          </script>
      </kendo:dataSource-transport-parameterMap>
     </kendo:dataSource-transport>
     <kendo:dataSource-schema>
      <kendo:dataSource-schema-model id="uId">
       <kendo:dataSource-schema-model-fields>
        <kendo:dataSource-schema-model-field name="employeeID"
         type="string" />
        <kendo:dataSource-schema-model-field name="productName"
         type="string">
         <kendo:dataSource-schema-model-field-validation required="true" />
        </kendo:dataSource-schema-model-field>
        <kendo:dataSource-schema-model-field name="activityName"
         type="string">
         <kendo:dataSource-schema-model-field-validation required="true" />
        </kendo:dataSource-schema-model-field>
        <kendo:dataSource-schema-model-field name="percentage"
         type="number" />
        <kendo:dataSource-schema-model-field name="totalPercentage"
         type="string" />
       </kendo:dataSource-schema-model-fields>
      </kendo:dataSource-schema-model>
     </kendo:dataSource-schema>
    </kendo:dataSource>
   </kendo:grid>
  </kendo:grid-detailTemplate>
 </div>
 <script type="text/javascript">
 $(document).ready(function(){
  
  $("#submitbutton").click(function(){
   $("#grid-id").show();
   $("#grid-nested-id").show();
   console.log("Submit Button Clicked");
   console.log(selCostcenter);
   console.log(selTeam);
   var $locations=$("#locations");
   selLocation = $locations.val();
   console.log(selLocation);
   var submitString={"costcenter":selCostcenter,"team":selTeam,"location":selLocation};
   $("#parent-grid").data().kendoGrid.dataSource.read({"costcenter":selCostcenter,"team":selTeam,"location":selLocation});
   
  }); 
 });
 function DetailExpand(e){
  console.log("detailExpand");
  //console.log(e.detailRow);
  var row = e.masterRow[0];
  var employeeID= $(row).closest('tr').find('td').eq(1).text();
  console.log("eID:"+employeeID);
  var childGrid = "#child-grid_"+employeeID; 
  $(childGrid).data().kendoGrid.dataSource.read({"employeeID":employeeID,"infoType":"detailed"});
  console.log($(childGrid).data().kendoGrid.dataSource);
  /*$(row).closest('tr').find('td').each(function() {
          var textval = $(this).text(); // this will be the text of each <td>
          console.log(textval);
     });
  */
  
   
   
 }
 function detailInit(e){
  console.log("detailInit");
 }
 function onSave(e){
  console.log("Entered On Save");
  //console.log(e);
  //console.log("---");
  var parentRow = this.wrapper.closest("tr").prev();
//   var employeeID= $(parentRow).find('td').eq(1).text();
   //console.log("eID:"+employeeID);
   //var totalpercent = e.model.o.totalPercentage;
  /*
   var Model = e.model;
   
   for(var key in Model) {
       var value = Model[key];
       console.log("key: " + key);
       console.log("value: " + value);
   }
   
*/
   /*
   var totalPercent =  Model["totalPercentage"];
   for(var key in totalPercent) {
       var value = totalPercent[key];
       console.log("key: " + key);
       console.log("value: " + value);
   }
   */
   
   console.log( e.model["totalPercentage"]);
   //console.log( Model["totalPercentage"]);
          //$(parentRow).find('td').eq(5).text(totalpercent) ;
  
 }
 function onEdit(e){
  console.log("Entered On Edit");
  
   var parentRow = this.wrapper.closest("tr");
   console.log(parentRow);  
  console.log("Exit From Edit");
  
 }
 
 function onChange(){
  console.log("Entered On Change");
 }
 
 function cancel(e){
  console.log("Entered cancel");
  e.preventDefault();
 }
 
 function OnChildRequestEnd () {
  console.log("Entered Into OnChildRequestEnd");
 }
 function OnSync () {
  console.log("Entered Into OnSync");
 }
 // this function creates a Kendo UI DropDown List which will be attached to the row in the grid
 // where it is required
 function productEditor(container, options) {
  // create an input field with jQuery and configure it's values with declarative intialization
  // see http://docs.kendoui.com/howto/declarative_initialization for more information
  $("<input data-text-field='productName' data-value-field='productName' data-bind='value: " + options.field + "' />")
  // append it to the container (grid row currently in edit mode)
  .appendTo(container)
  // create the Kendo UI DropDown List
  .kendoDropDownList({
   dataSource: {
    // define the endpoint that will provide the data for this control
    transport: {
     read: "ProductController"
    }
   }
  });
 }
 function activityEditor(container, options) {
  // create an input field with jQuery and configure it's values with declarative intialization
  // see http://docs.kendoui.com/howto/declarative_initialization for more information
  $("<input data-text-field='activityName' data-value-field='activityName' data-bind='value: " + options.field + "' />")
  // append it to the container (grid row currently in edit mode)
  .appendTo(container)
  // create the Kendo UI DropDown List
  .kendoDropDownList({
   dataSource: {
    // define the endpoint that will provide the data for this control
    transport: {
     read: "ActivityController"
    }
   }
  });
 }
 function dataBound() {
        this.expandRow(this.tbody.find("tr.k-master-row").first());
    }
 
</script>
</body>
</html>
please help.
