|  | @@ -6,6 +6,7 @@
 | 
	
		
			
				|  |  |      <link rel="stylesheet" href="src/css/bootstrap/bootstrap.min.css" >
 | 
	
		
			
				|  |  |      <link rel="stylesheet" href="src/css/main.css">
 | 
	
		
			
				|  |  |      <link rel="stylesheet" href="src/css/font-awesome/font-awesome.min.css">
 | 
	
		
			
				|  |  | +    <link rel="stylesheet" href="src/css/cust_flex_grid.css">
 | 
	
		
			
				|  |  |      <!--
 | 
	
		
			
				|  |  |      <link rel="stylesheet" href="src/css/bootstrap/themes.css">
 | 
	
		
			
				|  |  |      -->
 | 
	
	
		
			
				|  | @@ -18,6 +19,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script type="text/javascript" src="/src/wijmo/controls/wijmo.grid.min.js"></script>
 | 
	
		
			
				|  |  |  <script type="text/javascript" src="/src/wijmo/controls/wijmo.grid.sheet.min.js"></script>
 | 
	
		
			
				|  |  | +<script type="text/javascript" src="/src/scripts/treeDataHelper.js"></script>
 | 
	
		
			
				|  |  |  <body>
 | 
	
		
			
				|  |  |      <nav class="navbar navbar-light bg-faded p-0 ">
 | 
	
		
			
				|  |  |                  <span class="header-logo px-1" >
 | 
	
	
		
			
				|  | @@ -46,11 +48,11 @@
 | 
	
		
			
				|  |  |          <input type="button" value="新增" onclick="billOperation('insert')"/>
 | 
	
		
			
				|  |  |          <input type="button" value="删除" onclick="billOperation('remove')"/>
 | 
	
		
			
				|  |  |          <input type="button" value="升级" onclick="billOperation('upgrade')"/>
 | 
	
		
			
				|  |  | -        <input type="button" value="降级级" onclick="billOperation('downgrade')"/>
 | 
	
		
			
				|  |  | +        <input type="button" value="降级" onclick="billOperation('downgrade')"/>
 | 
	
		
			
				|  |  |          <input type="button" value="上移" onclick="billOperation('moveup')"/>
 | 
	
		
			
				|  |  |          <input type="button" value="下移" onclick="billOperation('movedown')"/>
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  | -    <div id="theGrid" style="width:100%;height:auto;"></div>
 | 
	
		
			
				|  |  | +    <div id="theGrid" style="width:100%; height:600px;" class="custom-flex-grid"></div>
 | 
	
		
			
				|  |  |      <p>测试 FlexSheet 控件:</p>
 | 
	
		
			
				|  |  |      <div id="flexsheet" style="width:100%;height:auto;"></div>
 | 
	
		
			
				|  |  |      <!--
 | 
	
	
		
			
				|  | @@ -72,8 +74,12 @@
 | 
	
		
			
				|  |  |                  for (var i = 0; i < data.length; i++) {
 | 
	
		
			
				|  |  |                      data[i]["chk"] = (i%2 == 0);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                sortDataBySerial(data);
 | 
	
		
			
				|  |  | -                buildGrid(data);
 | 
	
		
			
				|  |  | +                tree_Data_Helper.sortDataBySerial(data);
 | 
	
		
			
				|  |  | +                //*
 | 
	
		
			
				|  |  | +                buildGrid(tree_Data_Helper.buildTreeData(data));
 | 
	
		
			
				|  |  | +                /*/
 | 
	
		
			
				|  |  | +                 buildNormalGrid(data);
 | 
	
		
			
				|  |  | +                //*/
 | 
	
		
			
				|  |  |                  //buildSheet(data);
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  |              error: function(jqXHR, textStatus, errorThrown){
 | 
	
	
		
			
				|  | @@ -83,14 +89,6 @@
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function buildTreeData(data) {
 | 
	
		
			
				|  |  | -        //
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    function sortByCustId(data, IdStr, IdVal) {
 | 
	
		
			
				|  |  | -        //
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      function billOperation(opr) {
 | 
	
		
			
				|  |  |          switch (opr) {
 | 
	
		
			
				|  |  |              case  'insert':
 | 
	
	
		
			
				|  | @@ -108,40 +106,14 @@
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function sortDataBySerial(data) {
 | 
	
		
			
				|  |  | -        data.sort(function(item1, item2) {
 | 
	
		
			
				|  |  | -            var rst = 0;
 | 
	
		
			
				|  |  | -            if (item1["SerialNo"] > item2["SerialNo"]) {
 | 
	
		
			
				|  |  | -                rst = 1;
 | 
	
		
			
				|  |  | -            } else if (item1["SerialNo"] < item2["SerialNo"]) {
 | 
	
		
			
				|  |  | -                rst = -1;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            return rst;
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    function buildGrid(data) {
 | 
	
		
			
				|  |  | +    function buildNormalGrid(data) {
 | 
	
		
			
				|  |  |          var grid = new wijmo.grid.FlexGrid('#theGrid',
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  |                      autoGenerateColumns: false,
 | 
	
		
			
				|  |  | -                    columns: [
 | 
	
		
			
				|  |  | -                        { header: '项目节', name: "", binding: 'Code', allowSorting: false, width: 160 },
 | 
	
		
			
				|  |  | -                        { header: '清单子目号', name: "", binding: 'B_Code', allowSorting: false, width: 160 },
 | 
	
		
			
				|  |  | -                        { header: '名称', name: "", binding: 'Name', allowSorting: false, width: 380 },
 | 
	
		
			
				|  |  | -                        { header: '单位', name: "", binding: 'Units', allowSorting: false, align: 'Center', width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '清单数量', name: "", binding: 'Quantity', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '设计数量1', name: "", binding: 'DesignQuantity', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '设计数量2', name: "", binding: 'DesignQuantity2', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '清单单价', name: "", binding: 'UnitPrice', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '经济指标', name: "", binding: "DesignPrice", allowSorting: false, width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '金额', name: "", binding: "TotalPrice", allowSorting: false, width: 100 },
 | 
	
		
			
				|  |  | -                        { header: '备注', name: "", binding: "Memostr", allowSorting: false, width: 200 },
 | 
	
		
			
				|  |  | -                        //{ header: ' ', name: "button", binding: "button", allowSorting: false, width: 100 },
 | 
	
		
			
				|  |  | -                        { header: ' ', name: "check", binding: "chk", allowSorting: false, width: 100 }
 | 
	
		
			
				|  |  | -                    ]
 | 
	
		
			
				|  |  | +                    columns: buildColumns(),
 | 
	
		
			
				|  |  | +                    selectionMode: wijmo.grid.SelectionMode.ListBox
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  | -        grid.itemsSource = data;
 | 
	
		
			
				|  |  |          grid.itemFormatter = function(panel, r, c, cell) {
 | 
	
		
			
				|  |  |              if (wijmo.grid.CellType.Cell == panel.cellType) {
 | 
	
		
			
				|  |  |                  var col = panel.columns[c];
 | 
	
	
		
			
				|  | @@ -164,10 +136,54 @@
 | 
	
		
			
				|  |  |                  cell.innerHTML = "^_^";
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        grid.itemsSource = data;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function buildGrid(treeData) {
 | 
	
		
			
				|  |  | +        // create the grid
 | 
	
		
			
				|  |  | +        var grid = new wijmo.grid.FlexGrid('#theGrid');
 | 
	
		
			
				|  |  | +        // populate the grid and set childItemsPath to show data hierarchically
 | 
	
		
			
				|  |  | +        grid.childItemsPath = 'items';
 | 
	
		
			
				|  |  | +        grid.itemFormatter = function(panel, r, c, cell) {
 | 
	
		
			
				|  |  | +            if (wijmo.grid.CellType.Cell == panel.cellType) {
 | 
	
		
			
				|  |  | +                var col = panel.columns[c];
 | 
	
		
			
				|  |  | +                panel.rows[r].isReadOnly = false;
 | 
	
		
			
				|  |  | +            } else if (wijmo.grid.CellType.ColumnHeader == panel.cellType) {
 | 
	
		
			
				|  |  | +                cell.style["text-align"] = "center";
 | 
	
		
			
				|  |  | +                cell.onclick = function() {selectCol(grid, c)};
 | 
	
		
			
				|  |  | +            } else if (wijmo.grid.CellType.RowHeader == panel.cellType) {
 | 
	
		
			
				|  |  | +                cell.innerHTML = r + 1;
 | 
	
		
			
				|  |  | +                cell.style["font-weight"] = "normal";
 | 
	
		
			
				|  |  | +            } else if (wijmo.grid.CellType.TopLeft == panel.cellType) {
 | 
	
		
			
				|  |  | +                cell.innerHTML = "^_^";
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        grid.initialize({
 | 
	
		
			
				|  |  | +            autoGenerateColumns: false,
 | 
	
		
			
				|  |  | +            columns: buildColumns(),
 | 
	
		
			
				|  |  | +            itemsSource: treeData,                             // hierarchical data
 | 
	
		
			
				|  |  | +            childItemsPath: 'items'                                // set hierarchy path
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        //grid.collapseGroupsToLevel(1);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function editRow(row) {
 | 
	
		
			
				|  |  | -        alert(colHeaders.length);
 | 
	
		
			
				|  |  | +    function buildColumns() {
 | 
	
		
			
				|  |  | +        var rst = [
 | 
	
		
			
				|  |  | +            { header: '项目节', name: "", binding: 'Code', allowSorting: false, width: 160 },
 | 
	
		
			
				|  |  | +            { header: '清单子目号', name: "", binding: 'B_Code', allowSorting: false, width: 160 },
 | 
	
		
			
				|  |  | +            { header: '名称', name: "", binding: 'Name', allowSorting: false, width: 380 },
 | 
	
		
			
				|  |  | +            { header: '单位', name: "", binding: 'Units', allowSorting: false, align: 'Center', width: 100 },
 | 
	
		
			
				|  |  | +            { header: '清单数量', name: "", binding: 'Quantity', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | +            { header: '设计数量1', name: "", binding: 'DesignQuantity', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | +            { header: '设计数量2', name: "", binding: 'DesignQuantity2', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | +            { header: '清单单价', name: "", binding: 'UnitPrice', allowSorting: false, align: 'Right', width: 100 },
 | 
	
		
			
				|  |  | +            { header: '经济指标', name: "", binding: "DesignPrice", allowSorting: false, width: 100 },
 | 
	
		
			
				|  |  | +            { header: '金额', name: "", binding: "TotalPrice", allowSorting: false, width: 100 },
 | 
	
		
			
				|  |  | +            { header: '备注', name: "", binding: "Memostr", allowSorting: false, width: 200 },
 | 
	
		
			
				|  |  | +            //{ header: ' ', name: "button", binding: "button", allowSorting: false, width: 100 },
 | 
	
		
			
				|  |  | +            { header: ' ', name: "check", binding: "chk", allowSorting: false, width: 100 }
 | 
	
		
			
				|  |  | +        ];
 | 
	
		
			
				|  |  | +        return rst;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function selectCol(grid, colIdx) {
 |