if (!Ext.gridutil){
Ext.gridutil={};
}
Ext.gridutil.cspanId="#cspan";
Ext.gridutil.rspanId="#rspan";
  /**
   * tsFieldColumns是以行数组形式构造的标题,参照dhtmlXGridFromTable的头方式实现，例如
   * [["标题1","标题2","标题3","标题4","标题5"],["标题11","标题22","标题23","标题24","标题25"]]
   */
Ext.gridutil.dhtmlXGrid2DbXml = function (dhtmlXGrid){
  var grid = dhtmlXGrid;
  var headerCount=0;
  var dbXmlJson = new db.DbXmlJson();
  if (typeof grid.tsFieldColumns=="object"){
    var fieldColumns = grid.tsFieldColumns;
    var tmp = [];
    for (var j=0;j<fieldColumns.length;j++){
      if (typeof fieldColumns[j]=="string"){
        tmp[tmp.length] = fieldColumns[j].split(",");
      }else if (fieldColumns[j]){
        tmp[tmp.length] = fieldColumns[j];
      }
    }
    var tsFieldColumns = [];
    if (tmp.length>0){
      for (var m=0; m<tmp[0].length; m++){
        var tmpH="";
        for (var k=0; k<tmp.length; k++){
          if (tmp[k][m]=="#cspan" && m>0){
            tmp[k][m] = tmp[k][m-1];
          }else if (tmp[k][m]=="#rspan"){
            tmp[k][m] = "";
          }
          if (tmpH!==""){
            if (tmp[k][m]!=""){
              tmpH = tmpH +"|" + tmp[k][m];
            }
          }else{
            tmpH = tmp[k][m];
          }
        }
        tsFieldColumns[m] = tmpH;
      }
    }else{
      alert("没有设置列头信息");
      return false;
    }
    headerCount = tsFieldColumns.length;
    for (var index = 0; index<tsFieldColumns.length; index++ ){
      var fldDef = tsFieldColumns[index];
      var fldDefObj = {};
      if (typeof fldDef=="object"){
        if (fldDef.fieldName){
          fldDefObj.fieldName = fldDef.fieldName;
        }
        if (fldDef.dateType){
          fldDefObj.dateType  = fldDef.dateType;
        }else{
          fldDefObj.dateType  = db.consts.STRING;
        }        
      }else{
        fldDefObj.fieldName = fldDef;
        fldDefObj.dateType  = db.consts.STRING;
      }
      if (fldDefObj.dateType==db.consts.INTEGER){
        if (dbXmlJson.addIntDef(fldDefObj.fieldName)===false) {
          return false;
        }
      }else{
       if (dbXmlJson.addStringDef(fldDefObj.fieldName)===false) {
         return false;
       }
      }
    }
  }else{
   headerCount=grid.getColumnCount();
   for(var i=0;i<headerCount;i++){
    var fieldConfig = grid.getColumnLabel(i);
    if (typeof fieldConfig==="undefined"){
      alert(i+"不是对象1");
      break;
    }
    if (dbXmlJson.addStringDef(fieldConfig)===false) {
      return false;
    }
   }
  }
  var columnCount = 0;
  if (typeof grid.tsGridDataBody!=="object"){
    if (typeof grid.getColumnCount!="function") {
      alert("对象不是有效的dhtmlXGrid实例[可以构造设置tsGridDataBody属性]");
      return false;
    }
    columnCount=grid.getColumnCount();
    var record = grid.getAllItemIds();
    var row = record.split(",");
    for (var i2=0;i2<row.length;i2++){
      var dataRow={};
      for (var j2=0;j2<columnCount;j2++){
        var column = grid.cells(row[i2],j2);
        if(typeof column==="undefined"){
          alert(i2+"不是对象2");
          break;
        }
        var fldDef2 = dbXmlJson.getFieldDef(j2);
        if (fldDef2){
          dataRow[fldDef2.fieldName] = Ext.gridutil.htmlTagToEnter(column.getValue());
        }
      }
      for (var j3=columnCount;j3<headerCount;j3++){
        var fldDef3 = dbXmlJson.getFieldDef(j3);
        if (fldDef3){
          dataRow[fldDef3.fieldName] = "";
        }
      }
      dbXmlJson.addRow(dataRow);
    }
  } else {
    var tsGridDataBody = grid.tsGridDataBody;
    if (tsGridDataBody.length>0) {
      columnCount=tsGridDataBody[0].length;
    } else {
      columnCount = headerCount;
    }
    for (var i3=0;i3<tsGridDataBody.length;i3++){
      var dataRow={};
      for (var j3=0; j3<tsGridDataBody[i3].length; j3++){
        var column = tsGridDataBody[i3][j3];
        if(typeof column==="undefined"){
          alert("["+i3+","+j3+"]不是对象3");
          break;
        }
        var fldDef2 = dbXmlJson.getFieldDef(j3);
        if (fldDef2){
          if (column.colSpaned && column.rowSpaned){
            dataRow[fldDef2.fieldName]=Ext.gridutil.cspanId+"*"+Ext.gridutil.rspanId;
          } else if (column.colSpaned){
            dataRow[fldDef2.fieldName]=Ext.gridutil.cspanId;
          } else if (column.rowSpaned){
            dataRow[fldDef2.fieldName]=Ext.gridutil.rspanId;
          } else if (typeof column ==='string'){ 
           dataRow[fldDef2.fieldName] = Ext.gridutil.htmlTagToEnter(column);
          } else {
            dataRow[fldDef2.fieldName] = Ext.gridutil.htmlTagToEnter(column.gridValue);
          }
        } else {
          alert(j3+"没有对应的标题列");
          columnCount = 10000;
          break;
        }
      }
      for (var j3=tsGridDataBody[i3].length;j3<headerCount;j3++){
        var fldDef3 = dbXmlJson.getFieldDef(j3);
        if (fldDef3){
          dataRow[fldDef3.fieldName] = "";
        }
      }
      dbXmlJson.addRow(dataRow);
    }
  }
  if (headerCount < columnCount ){
    alert("设定头的列数<实际数据的列数");
    return false;
  }
  return dbXmlJson.dbXML();
};

Ext.gridutil.dhtmlXGrid2Excel = function (dhtmlXGrid){
  var grid = dhtmlXGrid;
  var temp = "";
  var headerCount = 0;
  if (typeof grid.tsFieldColumns=="object"){
    var fieldColumns = grid.tsFieldColumns;
    var tmp = [];
    for (var j=0;j<fieldColumns.length;j++){
      if (typeof fieldColumns[j]=="string"){
        tmp[tmp.length] = fieldColumns[j].split(",");
      }else if (fieldColumns[j]){
        tmp[tmp.length] = fieldColumns[j];
      }
    }
	  for (var k=0; k<tmp.length; k++){
	    for (var m=0; m<tmp[0].length; m++){
	      if (tmp[k][m]=="#cspan" && m>0){
	        tmp[k][m] = tmp[k][m-1];
	      }else if (tmp[k][m]=="#rspan"){
	        tmp[k][m] = "";
	      }
	      temp = temp + Ext.gridutil.htmlTagToExcel(tmp[k][m]) + "\t";
	    }
	    temp = temp + "\n";
	  }
  }else{
   headerCount=grid.getColumnCount();
   for(var i=0;i<headerCount;i++){
    var fieldConfig = grid.getColumnLabel(i);
    if (typeof fieldConfig==="undefined"){
      alert(i+"不是对象1");
      break;
    }
    temp = temp + Ext.gridutil.htmlTagToExcel(fieldConfig) + "\t";
   }
   temp = temp + "\n";
  }
  if (typeof grid.tsGridDataBody!=="object"){
    var columnCount = grid.getColumnCount();
    var record = grid.getAllItemIds();
    var row = record.split(",");
    for (var i3=0;i3<row.length;i3++){
      for (var j3=0;j3<columnCount;j3++){
        var column = grid.cells(row[i3],j3);
        if(typeof column==="undefined"){
          alert(i3+"不是对象2");
          break;
        }
        temp = temp + Ext.gridutil.htmlTagToExcel(column.getValue()) + "\t";
      }
      temp = temp + "\n";
    }
  } else {
    var tsGridDataBody = grid.tsGridDataBody;
    for (var i3=0;i3<tsGridDataBody.length;i3++){
      for (var j3=0; j3<tsGridDataBody[i3].length; j3++){
        var column = tsGridDataBody[i3][j3];
        if(typeof column==="undefined"){
          alert("["+i3+","+j3+"]不是对象3");
          break;
        }
        if (column.colSpaned || column.rowSpaned){
          temp = temp + "\t";
        } else if (typeof column ==='string'){ 
           temp = temp + Ext.gridutil.htmlTagToExcel(column)+"\t";
        } else {
          temp = temp + Ext.gridutil.htmlTagToExcel(column.gridValue) + "\t";
        }
      }
      temp = temp + "\n";
    }
  }
  return temp;
};

