Ext3.4-EXT之嵌套表格的实现


其中使用到的"RowExpander.js"为extjs官方示例中自带的。

实现这个嵌套表格要注意两点技巧:

1 提供给外层表格的dataStore的数据源以嵌套数组的形式表示细节区的数据,如下面的黑体所示。

  
  1. var testData=[
  2.    ["lugreen","男",26,[["数学",100],["语文",150]]]
  3.    ,["lisi","男",25,[["数学",100],["语文",150]]]
  4.    ,["zhangsan","男",27,[["数学",120],["语文",158]]]   
  5. ];

使用数组集中record对象的json属性来获取以细节区数据

  var data=r.json[3];

2 在rowExpander的 expand事件中添加嵌套表格.

 

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="window.aspx.cs" Inherits="Ext.window" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>test</title>
    <script type="text/javascript">
    </script>
    <link href="ext-3.4.0/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
    <script src="ext-3.4.0/adapter/ext/ext-base.js" type="text/javascript"></script>
    <script src="ext-3.4.0/ext-all.js" type="text/javascript"></script>
    <script src="ext-3.4.0/examples/ux/RowExpander.js" type="text/javascript"></script>
    <script type="text/javascript">
        Ext.onReady(function () {
            var testData = [["lugreen", "男", 26, [["数学", 100], ["语文", 150]]],
             ["lisi", "男", 25, [["数学", 100], ["语文", 150]]],
             ["zhangsan", "男", 27, [["数学", 120], ["语文", 158]]]];

            storeTest = new Ext.data.SimpleStore({
                fields: ["name", "sex", "age", "grade"],
                data: testData
            });
            var expander = new Ext.grid.RowExpander({ tpl: new Ext.XTemplate('<div class="detailData">', '', '</div>') });
            expander.on("expand", function (expander, r, body, rowIndex) {
                window.testEle = body;
                if (Ext.DomQuery.select("div.x-panel-bwrap", body).length == 0) {
                    //alert("a");
                    var data = r.json[3];
                    var store = new Ext.data.SimpleStore({
                        fields: ["class", "degrade"],
                        data: data
                    });
                    var cm = new Ext.grid.ColumnModel([{
                        header: "科目",
                        dataIndex: 'class',
                        width: 130,
                        hideable: false,
                        sortable: false,
                        resizable: true
                    },
                         {
                             header: "成绩",
                             dataIndex: 'degrade',
                             width: 130,
                             hideable: false,
                             sortable: false,
                             resizable: true
                             }]);
                    Ext.DomQuery.select("div.detailData")[0];
                    var grid = new Ext.grid.GridPanel({
                          store: store,
                          cm: cm,
                          renderTo: Ext.DomQuery.select("div.detailData", body)[0],
                          autoWidth: true,
                          autoHeight: true
                      });
                }
            });
              var cm = new Ext.grid.ColumnModel([expander,
                { header: "姓名", dataIndex: 'name', width: 50, hideable: false, sortable: false },
                 { header: "性别", dataIndex: 'sex', width: 130, hideable: false, sortable: false, resizable: true }, 
                 { header: "年龄", dataIndex: 'age', width: 130, hideable: false, sortable: false, resizable: true }
             ]);
            var grid = new Ext.grid.GridPanel({
                          id: 'testgrid',
                          store: storeTest,
                          cm: cm,
                          renderTo: "grid1",
                          width: 780,
                          autoHeight: false,
                          height: 300,
                          listeners: {},
                          plugins: [expander]
            });
        });
    </script>
</head>
<body>
    <div id="grid1">
    </div>
    <div id="grid2">
    </div>
</body>
</html>

  

posted @ 2014-03-25 19:52  尼姑哪里跑  阅读(1364)  评论(0编辑  收藏  举报