日期:2014-05-16  浏览次数:20442 次

EXTJS 动态获取列及列值问题
在开发的时候,经理给了一个这样的开发任务,在一个GRID中,列从数据库表中来,,同时相应数据也是从数据库(竖表)中来,,最开妈可郁闷了,,,后来想到一个方法..如下:

var sql_header="select * from LDElementDef where LDElementDef.subjectno='"+subjectno+"'";//获取列名称信息.
var cm_data=app.SynXHR("jsplib/jsonquery.jsp?cmdType=header&sql="+sql_header);";//获取列名称信息.

cm_data.unshift(new Ext.grid.RowNumberer());//在列属性前面再加个字段,unshift的用法,,最总是在最前面增加属性,
 
    var tmp=new Ext.grid.GridEditor(new Ext.form.TextField({allowBlank: false}));//是否可编辑 false为可编辑
    var sm=new Ext.grid.CheckboxSelectionModel({singleSelect:false});//是否可多选择 false为多选
//3.初始化ColumnModel
var cm =new Ext.grid.ColumnModel({
    columns:cm_data,//列名,,从数据库中获取..
    defaults:{
    editor:tmp   
    }
});
//4.获取列名
var sql_colname="select * from LDElementDef where LDElementDef.subjectno='"+subjectno+"'";
var colname=app.SynXHR("jsplib/jsonquery.jsp?cmdType=colName&sql="+sql_colname);

//5.构造grid数据
var sql_content="select * from lcsubject where subjectserialno = '"+subjectno+"'";//查询数据

var storeGrid=new Ext.data.Store({
proxy:new Ext.data.HttpProxy({url:'jsplib/jsonqueryR.jsp?sql='}),
reader:new Ext.data.JsonReader({
totalProperty:'totalProperty',
root:'root'
},
colname
)
});
storeGrid.load();

这样就OK了,呵呵,

同时,在这中,有个同步的问题,大家也看到了一个:app.SynXHR的东东,这是一个同步处理方法,其方法代码如下:
app.SynXHR=function(url){
if (window.ActiveXObject) {
        obj = new ActiveXObject('Microsoft.XMLHTTP');
    }
    else if (window.XMLHttpRequest) {
        obj = new XMLHttpRequest();
    }
obj.open('GET', url, false);
obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
obj.send(null);
return Ext.util.JSON.decode(obj.responseText);
}

使用之前,请注意在Ext.onReady前面定义一下,如:

var app={};

Ext.onReady(function(){};