这就要看你从后台返回的Json了在Json里可以包含列定义,用这个列定义来重新制定你的Grid的表头列

解决方案 »

  1.   

    动态定义model,动态定义column就行了。
    这个刚做过,可以实现。
      

  2.   

    是的,我在后台定义了一个表头的model,然后作为数据给传给grid的columns,这样倒是能够实现表头的动态加载,可是我在动态添加一行记录的时候,不知道该如何动态的创建一个model来给store作为插入的依据呢,这应该怎么办呢?
      

  3.   

    您做的这个实现了增加记录的功能了么?就是根据你的表头添加相应的记录,类似于editgrid的动态添加一行然后保存的效果。谢谢了
      

  4.   

    是一样的吧,我没有做增加。你把自定义的属性赋值后,对应的store定义好,具有自定义的字段后,增加是一样的吧。
    主要是这里。在store load数据后,假如你只知道id,其他都是动态的,用key value返回,你在前台,把keyvalue加到js对象中就行了。JS就是这样,可以动态加属性,方便。
      

  5.   

    var model="[{header:'日期/站名',align:'center',sortable:false,dataIndex:'statis_date',renderer:onLineEdit.formatDate,enableColumnHide:false,width:90,editor:{allowBlank:false,xtype:'datefield',format:'Ymd'},field:{xtype:'datefield',format:'y-m-d'}},{header:'开边门类型',align:'center',dataIndex:'mantkt', field:{xtype:'combobox',name:'manTket1',id:'manTket1',store:comboxStore, queryMode: 'local',width:80,valueField:'manTktTypName',displayField:'manTktTypName'}}";
    var i=0;

    if(fieldList.length > 10) {
    fieldList = [];
    }
    Ext.each(json,function(item){

    if("03" == Line && (item.station_nam=="广州东站" || item.station_nam=="林和西")) {

    } else if(item.station_cd =='ZZ') {

    } else {
    model+=",{header:'"+item.station_nam+"',align:'center',dataIndex:'station_"+ Line + item.station_cd +"', editor: {allowBlank: false,xtype: 'numberfield'}}";
    fieldList.push("station_"+ Line + item.station_cd);
    }
    i++;
    });



    if(Line=='30') {
    model+=",{header:'广州东站',align:'center',dataIndex:'station_0301'}";
    model+=",{header:'林和西',align:'center',dataIndex:'station_0302'}";
    fieldList.push("station_0301");
    fieldList.push("station_0302");
    }
    model+=",{header:'合计',align:'center',dataIndex:'total_col'}]";
    if(i==0){model="[]"}
    var jsonColumn=eval(model);
    grid.reconfigure(store,jsonColumn);
    grid.render();
      

  6.   

    谢谢,有道理,不过在动态定义新的store的时候发现了一个问题,就是说:store的model也是动态定义的,而这个model是根据fields来动态定义的,我如何能够先移除原来的fields,然后增加新的fields呢?
      

  7.   

    其实不用这么复杂,在grid渲染完之后,只需要grid.store.add({}),就能增加一行了