Ext中怎么动态获取(表头)ColumnModel,列名从数据库中取

starbhhc 2010-06-28 03:11:00
谢谢各位大虾!有具体的代码更好!
...全文
899 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoujp_xyz 2010-06-28
  • 打赏
  • 举报
回复

var column = [], record = [];

/*动态得到列表的列模型*/
Ext.Ajax.request({
url: "Module/StaffDeduct/StaffDeductHandler.ashx",
params: { action: "GetPositionColumn" },
method: "POST",
success: function(response, ops) {
var o = Ext.decode(response.responseText);
column = o.column;
record = o.record;
/*你的操作*/
}
})
starbhhc 2010-06-28
  • 打赏
  • 举报
回复
在后台中放入作用于:
session.setAttribute("columns", columns);
starbhhc 2010-06-28
  • 打赏
  • 举报
回复
前台代码,在初始化ColumnModel的地方引用后台的columns变量既可
new Ext.grid.ColumnModel([
${columns} //这里有错误!
]);
starbhhc 2010-06-28
  • 打赏
  • 举报
回复
js:这里出错误了!不能写EL表达式吧!


后台:这样写吗?
Long orgId = baseUtil.getUser(request).getOrgId();

List<Object[]> dataList = tradeReportService.getHistoryData(year, quarter, month, trade, orgId, start, limit);


String columns = "";
// Vector = getHeads(); 从数据库读取heads

int totalCount = tradeReportService.getHistoryDataCount(year, quarter, month, trade, orgId);
// 转换JSON
String jsonStr = "[ ";
for(int i=0; i<dataList.size(); i++) {
//拼接columns字符串,最好用StringBuffer代替String
columns += "{header:" + dataList.get(i) + ", dataIndex:" + dataList.get(i) + "},\n";
}
if (!jsonStr.equals("[")) {
jsonStr = jsonStr.substring(0, jsonStr.length() - 1) + "]";
} else {
jsonStr = jsonStr + "]";
}
response.setContentType("text/html;charset=UTF-8");
try {
response.getWriter().write(
"{\"totalProperty\":[" + totalCount + "],\"root\":"
+ jsonStr + "}");
} catch (IOException e) {
e.printStackTrace();
}
return null;
lemon520 2010-06-28
  • 打赏
  • 举报
回复
发email跟在帖子里回复差不多吧,你结合自己的情况吧代码改改就是了,有问题在帖子里回复吧。
starbhhc 2010-06-28
  • 打赏
  • 举报
回复
我的email :wangyanfengzhige@126.com 发email可以吗?
lemon520 2010-06-28
  • 打赏
  • 举报
回复
抱歉,公司封了qq/webqq/msn/meebo/ebuddy等一切im工具
hoojo 2010-06-28
  • 打赏
  • 举报
回复

Ext的grid表头也是数组对象。也是可以从数据库中取到的。一般是根据数据库进行配置的,很少有要动态的表头需求。
columns: [
{
id: 'description',
header: "Task",
width: 80,
sortable: true,
dataIndex: 'description',
summaryType: 'count',
hideable: false,
summaryRenderer: function(v, params, data){
return ((v === 0 || v > 1) ? '(' + v +' Tasks)' : '(1 Task)');
},
editor: new Ext.form.TextField({
allowBlank: false
})
},{
header: "Project",
width: 20,
sortable: true,
dataIndex: 'project'
},{
header: "Due Date",
width: 25,
sortable: true,
dataIndex: 'due',
summaryType:'max',
renderer: Ext.util.Format.dateRenderer('m/d/Y'),
editor: new Ext.form.DateField({
format: 'm/d/Y'
})
}];

starbhhc 2010-06-28
  • 打赏
  • 举报
回复
加我QQ,85533441,我急用!谢谢!!
lemon520 2010-06-28
  • 打赏
  • 举报
回复
我写的伪代码是java做后台,你看得懂就行了,逻辑都是一样的,store的动态处理跟这个类似


后台代码:
String columns = "";
Vector = getHeads(); //从数据库读取heads
for(int i=0; i<heads.size(); i++) {
//拼接columns字符串,最好用StringBuffer代替String
columns += "{header:" + heads.get(i) + ", dataIndex:" + heads.get(i) + "},\n";
}
columns.substring(0, columns.length() - 1); //去掉最后一个逗号
//后台代码完毕,将columns变量放到前台可以获取的作用域中

前台代码,在初始化ColumnModel的地方引用后台的columns变量既可
new Ext.grid.ColumnModel([
${columns}
]);

starbhhc 2010-06-28
  • 打赏
  • 举报
回复
有具体的代码更好!本人菜鸟!!!!
lemon520 2010-06-28
  • 打赏
  • 举报
回复
当然你的column是后台组装的话,store的字段也需要在后台组装
lemon520 2010-06-28
  • 打赏
  • 举报
回复
在后台生成表头字段的js代码就可以了

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧