先看效果:
这个是网上我找到的 可以运行 但是我在应用的时候发现 当我选中第一条数据(lugreen 男 26)的语文的时候 同时也选中了第二条数据(lisi 男 25) 当我双击第一条数据的语文的时候 第二条数据也会发生展开或者收缩动作 而且 如果总共只有3条祝主数据 子数据多于3条的话 双击或点击子数据中的第4(>3) 条的话 就会报this.getRow(...)' 为空或不是对象和Ext.fly(...)' 为空或不是对象的错  
请问如何解这个BUG 或者 让子Grid 展开的时候 不可以选择  

解决方案 »

  1.   

    用Ext.grid.RowSelectionMode组件的selectRow方法
      

  2.   

    代码如下:<!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 rel="stylesheet" type="text/css" href="Lib/ExtJs/2_2/resources/css/ext-all.css" /> <script type="text/javascript" src="Lib/ExtJs/2_2/adapter/ext/ext-base.js"></script> 
    <script type="text/javascript" src="Lib/ExtJs/2_2/ext-all-debug.js"></script> 
    <script type="text/javascript" src="Lib/ExtJs/2_2/source/locale/ext-lang-zh_CN.js"></script> 
    <script type="text/javascript" src="Lib/ExtJs/plus/RowExpander.js"></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){ 
      //查找 grid  
      window.testEle=body; 
      //alert(body.id); 
      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 sm=new Ext.grid.CheckboxSelectionModel({singleSelect: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> 
    <style type="text/css"> 
    #div2 h2 { 
        font-weight:200; 
        font-size:12px; 

    .c1 h2 { 
        font-weight:200; 

    </style> 
    </head> 
    <body> 
    <div id="grid1"> 
       
    </div> 
    <div id="grid2"> 
       
    </div> </body> 
    </html> 我发现主Grid中的属性会有效果并且影响着 expander中的Grid 我在expander中的Grid设置disabled: true, disabledClass: "", 子Grid还是可以选择 
    关于2楼IBM_hoojo 说的Ext.grid.RowSelectionMode组件的selectRow  我还没找到如何做
      

  3.   

     grid1.on( {
    'mouseover' : function(e) {
    e.stopPropagation();
    },
    'mouseout' : function(e) {
    e.stopPropagation();
    }
    });

    grid1.afterMethod("processEvent", function(n, e) {
    e.stopPropagation();
    });
      

  4.   

    最讨厌就是有解决方法不放出来,自己独享的人。以后见到这种人就别回答他
    //嵌套Grid加以下两个事件监听就可以了
    mouseover: function(e){
            e.stopEvent();
    },
    rowmousedown: function(g, r, e){
            e.stopEvent();
    }