docs: function editRow($tr, colIndex) {
      if (colIndex < 0) return;
      var oThis = this;
      var isFixedCol = false;
      if ($tr && $tr.parents('table').attr('id').indexOf('_fixed_') > -1) isFixedCol = true;
      $tr = $tr || $('#' + this.options.id + '_content_tbody tr[role="row"]:eq(' + this.eidtRowIndex + ')');
      colIndex = colIndex || 0;
      var row = this.dataSourceObj.rows[this.eidtRowIndex].value;
      this.editRowObj = this.cloneObj(row);
      if (this.options.editType == 'default') {
          var column = isFixedCol ? this.gridCompColumnFixedArr[colIndex] : this.gridCompColumnArr[colIndex];
          if (column && column.options.editable) {
              var td = $('td:eq(' + colIndex + ')', $tr)[0];
              var field = column.options.field;
              var value = $(row).attr(field);
              value = oThis.getString(value, '');
              var obj = {};
              obj.td = td;
              obj.value = value;
              obj.field = field;
              obj.editType = column.options.editType;
              obj.rowObj = oThis.editRowObj;
              obj.$tr = $tr;
              obj.colIndex = colIndex;
              oThis.editCell(obj);
          }
          $('#' + this.options.id + '_content_edit_menu').css('display', 'block');
          $('#' + this.options.id + '_content_edit_menu_cancel').css('marginLeft', '10px'); // 与form形式相比偏左
          var topIndex = $('tr:visible', $tr.parent()).index($tr);
          this.rowHeight = $tr.height(); // tianxq
          var t = this.rowHeight * (topIndex + 1) + this.headerHeight + 1;
      } else if (this.options.editType == 'form') {
          if (typeof this.options.formEditRenderFun == 'function') {
              if (this.fixedWidth > 0) {
                  var table = $('#' + this.options.id + '_content_fixed_table')[0];
              } else {
                  var table = $('#' + this.options.id + '_content_table')[0];
              }
  
              var tr = table.insertRow(this.eidtRowIndex + 2);
              tr.id = this.options.id + '_edit_tr';
              $(tr).addClass('grid_edit_form_tr');
              var cell = tr.insertCell();
              cell.id = this.options.id + '_edit_td';
              $(cell).addClass('grid_edit_form_td');
              cell.style.borderBottom = '0px';
              cell.style.background = '#fff';
              var cWidth = parseInt(this.contentMinWidth) + parseInt(this.fixedWidth);
              var htmlStr = '<div id="' + this.options.id + '_edit_form" class="u-grid-edit-form" style="width:' + cWidth + 'px;float:left;">';
              htmlStr += '</div>';
              cell.innerHTML = htmlStr;
              var obj = {};
              obj.grid = gridObj;
              obj.element = $('#' + this.options.id + '_edit_form')[0];
              obj.editRowObj = this.editRowObj;
              this.options.formEditRenderFun.call(this, obj);
              var htmlStr = '<div style="position:relative;float:left;width:100%;height:40px;"></div>';
              $('#' + this.options.id + '_edit_form')[0].insertAdjacentHTML('beforeEnd', htmlStr);
              var h = $('#' + this.options.id + '_edit_td')[0].offsetHeight;
              var color = $('#' + this.options.id + '_edit_form').css('background-color');
              if (this.options.multiSelect) {
                  var $div = $('#' + this.options.id + '_content_multiSelect > div').eq(this.eidtRowIndex);
                  var htmlStr = '<div class="grid_open_edit" id="' + this.options.id + '_multiSelect_edit" style="background-color:' + color + ';float:left;position:relative;width:' + this.multiSelectWidth + 'px;height:' + h + 'px"></div>';
                  $div[0].insertAdjacentHTML('afterEnd', htmlStr);
              }
              if (this.options.showNumCol) {
                  var $div = $('#' + this.options.id + '_content_numCol > .u-grid-content-num').eq(this.eidtRowIndex);
                  var htmlStr = '<div id="' + this.options.id + '_numCol_edit" style="background-color:' + color + ';float:left;position:relative;width:' + this.numWidth + 'px;"></div>';
                  $div[0].insertAdjacentHTML('afterEnd', htmlStr);
              }
              $('#' + this.options.id + '_content_edit_menu').css('display', 'block');
  
              if (this.fixedWidth > 0) {
                  var table1 = $('#' + this.options.id + '_content_table')[0];
                  var tr1 = table1.insertRow(this.eidtRowIndex + 2);
                  tr1.id = this.options.id + '_edit_tr1';
              }
          } else {
              if (this.fixedWidth > 0) {
                  var table = $('#' + this.options.id + '_content_fixed_table')[0];
              } else {
                  var table = $('#' + this.options.id + '_content_table')[0];
              }
  
              var tr = table.insertRow(this.eidtRowIndex + 2);
              tr.id = this.options.id + '_edit_tr';
              $(tr).addClass('grid_edit_form_tr');
              var cell = tr.insertCell();
              cell.id = this.options.id + '_edit_td';
              $(cell).addClass('grid_edit_form_td');
              cell.style.borderBottom = '0px';
              var cWidth = parseInt(this.contentMinWidth) + parseInt(this.fixedWidth);
              var htmlStr = '<div id="' + this.options.id + '_edit_form" class="u-grid-edit-form" style="width:' + cWidth + 'px;float:left;">';
              $.each(this.gridCompColumnFixedArr, function (i) {
                  var show = false;
                  if (this.options.editFormShow && (this.options.editable || !this.options.editable && oThis.options.noneEditableFormShow)) {
                      show = true;
                  }
  
                  if (show) {
                      var field = this.options.field;
                      var value = $(row).attr(field);
                      value = oThis.getString(value, '');
                      var title = this.options.title;
                      var headerColor = this.options.headerColor;
                      htmlStr += oThis.formEditCell(value, field, title, this.options.required, headerColor);
                  }
              });
  
              $.each(this.gridCompColumnArr, function (i) {
                  var show = false;
                  if (this.options.editFormShow && (this.options.editable || !this.options.editable && oThis.options.noneEditableFormShow)) {
                      show = true;
                  }
  
                  if (show) {
                      var field = this.options.field;
                      var value = $(row).attr(field);
                      value = oThis.getString(value, '');
                      var title = this.options.title;
                      var headerColor = this.options.headerColor;
                      htmlStr += oThis.formEditCell(value, field, title, this.options.required, headerColor);
                  }
              });
              htmlStr += '</div>';
              cell.innerHTML = htmlStr;
  
              $.each(this.gridCompColumnFixedArr, function (i) {
                  var show = false;
                  if (this.options.editFormShow && (this.options.editable || !this.options.editable && oThis.options.noneEditableFormShow)) {
                      show = true;
                  }
  
                  if (show) {
                      var field = this.options.field;
                      var td = $('#' + oThis.options.id + '_edit_' + field)[0];
                      var value = $(row).attr(field);
                      var title = this.options.title;
                      value = oThis.getString(value, '');
                      var obj = {};
                      obj.td = td;
                      td.innerHTML = '<div class="u-grid-content-td-div" title=""></div>';
                      obj.value = value;
                      obj.field = field;
                      obj.editType = this.options.editType;
                      obj.rowObj = oThis.editRowObj;
                      obj.$tr = $tr;
                      obj.colIndex = colIndex;
                      htmlStr += oThis.editCell(obj);
                  }
              });
  
              $.each(this.gridCompColumnArr, function (i) {
                  var show = false;
                  if (this.options.editFormShow && (this.options.editable || !this.options.editable && oThis.options.noneEditableFormShow)) {
                      show = true;
                  }
  
                  if (show) {
                      var field = this.options.field;
                      var td = $('#' + oThis.options.id + '_edit_' + field)[0];
                      var value = $(row).attr(field);
                      var title = this.options.title;
                      value = oThis.getString(value, '');
                      var obj = {};
                      obj.td = td;
                      td.innerHTML = '<div class="u-grid-content-td-div" title=""></div>';
                      obj.value = value;
                      obj.field = field;
                      obj.editType = this.options.editType;
                      obj.rowObj = oThis.editRowObj;
                      obj.$tr = $tr;
                      obj.colIndex = colIndex;
                      htmlStr += oThis.editCell(obj);
                  }
              });
  
              if (typeof this.options.renderEditMemu == "function") {
  
                  this.options.renderEditMemu.apply(this, [$('#' + this.options.id + '_edit_form')[0], this.eidtRowIndex, this.dataSourceObj.rows.length]);
              } else {
                  var htmlStr = '<div id="' + this.options.id + '_content_edit_menu" style="position:relative;float:left;width:100%;height:40px;"><button type="button" class="u-grid-content-edit-menu-button u-grid-content-edit-menu-button-ok" id="' + this.options.id + '_content_edit_menu_close">' + this.transMap.ml_close + '</button></div>';
  
                  $('#' + this.options.id + '_edit_form')[0].insertAdjacentHTML('beforeEnd', htmlStr);
                  $('#' + this.options.id + '_content_edit_menu_close').on('click', function (e) {
                      oThis.editClose();
                  });
              }
              // 处理左侧区域位置
              var h = $('#' + this.options.id + '_edit_td')[0].offsetHeight;
              var color = $('#' + this.options.id + '_edit_form').css('background-color');
              if (this.options.multiSelect) {
                  var $div = $('#' + this.options.id + '_content_multiSelect > div').eq(this.eidtRowIndex);
                  var htmlStr = '<div class="grid_open_edit " id="' + this.options.id + '_multiSelect_edit" style="background-color:' + color + ';float:left;position:relative;width:' + this.multiSelectWidth + 'px;height:' + h + 'px"></div>';
                  $div[0].insertAdjacentHTML('afterEnd', htmlStr);
              }
              if (this.options.showNumCol) {
                  var $div = $('#' + this.options.id + '_content_numCol > .u-grid-content-num').eq(this.eidtRowIndex);
                  var htmlStr = '<div id="' + this.options.id + '_numCol_edit" style="background-color:' + color + ';float:left;position:relative;width:' + this.numWidth + 'px;"></div>';
                  $div[0].insertAdjacentHTML('afterEnd', htmlStr);
              }
              $('#' + this.options.id + '_content_edit_menu').css('display', 'block');
  
              if (this.fixedWidth > 0) {
                  var table1 = $('#' + this.options.id + '_content_table')[0];
                  var tr1 = table1.insertRow(this.eidtRowIndex + 2);
                  tr1.id = this.options.id + '_edit_tr1';
              }
          }
      }
  }