⑴ extjs grid 怎样合并单元格
具体步骤如下:
/*
这个方法四个参数分别是
row:合并起始行
col:合并起始列.这两个参数是为了定位,要从哪个单元格开始合并.
type:是要合并行或者列.
num:是要合并的数量
//==>监听load , 执行合并单元格
grid.getStore().on('load', function () {
span(grid, 0, 0, 'row', 5);
});
*/
var span = function (grid, row, col, type, num) {
switch (type) {
case 'row':
tds = Ext.get(grid.view.getNode(row)).query('td');
Ext.get(tds[col]).set({ rowspan: num });
Ext.get(Ext.get(tds[col])).setStyle({ 'vertical-align': 'middle' });
for (i = row + 1; i < row + num; i++) {
Ext.get(Ext.get(grid.view.getNode(i)).query('td')[col]).destroy();
}
break;
case 'col':
tds = Ext.get(grid.view.lockedView.getNode(row)).query('td');
Ext.get(tds[col]).set({ colspan: num });
break;
}
};
⑵ extjs4 嵌套页面刷新父页面grid问题
奇怪 你为什么 要用ifram 我们一般都是定义一个viewport 给出border 布局,
比如你这样的布局,我们一般就是在viewport 引用一个panel 或者form 来显示你的查询条件,region设置为north,再在viewport
引入一个grid region设置为center, 这样他们就在一个界面中了 不久好拿对象了 。。
你这种不觉得慢么?也是 现在的电脑机子配置都很好,我们项目客户那边的还奔腾的处理器呢,用iframe慢的很的
⑶ Extjs 4.x 为GridPanel动态添加一行数据
//声明对应grid的Record对象
var ItemRecord = Ext.data.Record.create([
{name:'itemid'},
{name:'itemcode'},
{name:'itemname'},
{name:'price'},
{name:'mark'}
]);
//点新增按钮时则执行类似如下函数
function addNewLine2Grid(grid){
var rec = new ItemRecord({ //实例化Record对象,并赋予各字段初始值
'itemid': 0,
'itemcode': '',
'itemname': '',
'price': 0.00,
'mark': ''
});
grid.store.insert(grid.store.getCount(), rec); //插入新行作为grid最后一行
grid.getView().refresh(); //刷新
//grid.plugins[1].startEditing(grid.store.getCount()-1,4); //编辑最后一行第4列
}
⑷ ExtJs中,grid.Panel插件复制选中单元格内容
if (!Ext.grid.GridView.prototype.templates) {
Ext.grid.GridView.prototype.templates = {};
}
Ext.grid.GridView.prototype.templates.cell = new Ext.Template(
'<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} x-selectable {css}" style="{style}" tabIndex="0" {cellAttr}>',
'<div class="x-grid3-cell-inner x-grid3-col-{id}" {attr}>{value}</div>',
'</td>'
);
添加如上代码,就可以选专中了属
⑸ ExtJS 4中如何获取表格中改动的数据 如何将修改数据上传和修改store
1.Ext.data.Model 里面有dirty属性,如果改动过,dirty=true,你可以根据这个判断一下.
2.如何数据上传的话,你可以将表中的数据存储到一个数组里面,然后传到后台,到了后台再做处理.给你个例子
var answers = [];//存放表中数据
for (var i = 0; i < gridStore.getCount(); i++) {
var answer = gridStore.getAt(i);
answers.push(new Answer({
answer: answer.get("answer"),
isRight: answer.get("isRight")
}));
}
3.修改store的话,直接上传之后store.load()一下就好了.
其实我觉得如果可以的话,直接将原本数据删除,然后重新插入数据比较简单一点
⑹ 如何使用extjs4 制作双击grid弹出窗口
给你个例子
//给grid添加双击事件
gridpanel.addListener('itemdblclick', click, this);
//创建WINDOW对象
var win;
click() { //双击GRID的方法
// var Model = gridpanel.getSelectionModel();
// var sels = Model.getSelection();
// if (typeof (sels) != 'undefined') {
// var len = sels.length;
// for ( var i = 0; i < len; i++) {
// var date = sels[i].data.DDATE;
// }
// }
if (!win) {
win = Ext.create('widget.window', {
title : '计划单元',
closable : true,
closeAction : 'hide',
width : 800,
height : 500,
layout : 'border',
bodyStyle : 'padding: 5px;',
items : [ morefp, cenPanel, souPanel ] //ITEMS里面是弹出窗体所包含的PANEL
});
}
win.setVisible(true); //设置可见
}
⑺ 关于extjs grid复制粘贴功能
editor:newExt.form.DateField({id:"id1"}),
renderer:function(value,metadata,record,rowIndex,colIndex,store){
//这里有,有stroe,你想要的值不都有了么
//比如,这个加在第三列,然后你肯定知道行数,用store定位到某行的record,那么所有的值不都有了么,然后想怎么赋值不就怎么赋值(复制)了么
}
详细的你可以查api
Ext.grid.Column中:
renderer
:Function
(可选)当该方法通过传递以下参数时,会返回可显示的数据:
value:Object
该单元格的数据值。
metadata:Object
一个对象,您可以在其中设置以下属性:
css:String
一个添加到该单元格的TD元素上的CSS样式名。
attr:String
一个定义HTML属性的字符串,应用到数据容器内的表格单元格元素上(例如:'style="color:red;"')。
record:Ext.data.record
从数据中提取的Ext.data.Record。
rowIndex:Number
Rowindex
colIndex:Number
Columnindex
store:Ext.data.Store
从该Ext.data.Store对象中提取记录。
另外几个你会用到的方法
Ext.data.Store中:
getAt(Numberindex):Ext.data.Record
获取指定位置的记录。
参数:
index:Number
需要查找的记录的索引位置。
返回值:
Ext.data.Record
所传递的索引位置的Record。如果没有找到,返回undefined
Ext.data.Record中:
get(Stringname):Object
获取指定名称字段的值。
参数:
name:String
需要获取值的字段名称
返回值:
Object
字段的值。
set(Stringname,String/Object/Arrayvalue):void
将字段名设置为指定的值。
⑻ ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
由于某种原因,需要做一个控制grid列显示的checkboxgroup,虽然EXTJS4中的gridpanel自带列表可以来控制列的显示隐藏,但是有这样的需求(需要一目了然)
下面先上图
接着前几天做的工作,今天上午完成了定制字段,思路是在上面的普通查询或者高级查询结束以后,获得了列的fields,columns等信息,然后交给一个处理函数
makeCustomMadePanel,该函数用来生成checkboxgroup,生成的时候给它加上一个事件,原本以为checkbox会有类似于check的事件,结果API看了看貌似只有个change事件可以用,MD。。
下面贴下自己写的
makeCustomMadePanel函数。。用来根据grid的列自动生成checkboxgroup(整个grid的标头内容等信息均从后台得到,不管后台发来一个什么表,都能生成一个checkboxgroup来控制列的隐藏显示)
参数分别是gridpanel在reconfigure的时候用到的fields和columns,期中的var
t=grid_a.columnManager.headerCt.items.get(th.itemId);是关键。。这句用来获得grid_a的列信息。。貌似在api中查不到。网上找了几中方法都不适合。又不想给每个列一个ID。这是在stackoverflow.com/上找到的。。http://stackoverflow.com/questions/20791685/extjs-4-how-do-i-hide-show-grid-columns-on-the-fly
复制代码
代码如下:
function
makeCustomMadePanel(fields,cl)
{
var
x=cusMadePanel.getComponent('custom');
//console.log(cusMadePanel.getComponent('custom'));
for(var
i=0;i<fields.length;i++)
{
x.add(
{
xtype
:
'checkboxfield',
boxLabel
:
cl[i].header,
inputValue
:
fields[i].name,
checked:true,
itemId:i,
name
:
'custom',
listeners
:
{
change
:
function(th,
value,
oldValue,eop)
{
var
t=grid_a.columnManager.headerCt.items.get(th.itemId);
if(t.isVisible()){
t.setVisible(false);
}
else{
t.setVisible(true);
}
//grid_a.columns[3].setVisible(false);
}}
}
);
}
}
在给出customMadePanel
复制代码
代码如下:
Ext.define('customMadePanel',
{
extend
:
'Ext.form.Panel',
title
:
'定制字段',
collapsible
:
true,
items
:
[
{
itemId:'custom',
xtype
:
'checkboxgroup',
fieldLabel
:
'选择字段',
columns
:
6,
items
:
[]
}]
//collapsed:true,
});
var
cusMadePanel=new
customMadePanel();
我这种做法的不足也很明显,makeCustomMadePanel函数中的循环生成checkbox组件太耗时了,38个组件足足花了好几秒。。用户体验肯定不好。。
并且目前是在每次查询完之后都根据查询的结果生成一遍。。。我再想想好的解决办法
今天对makeCustomMadePanel做了优化,生成组件的速度与先前相比提升非常明显!
复制代码
代码如下:
function
makeCustomMadePanel(fields,cl)
cusMade=1;
var
x=cusMadePanel.getComponent('custom');
//console.log(cusMadePanel.getComponent('custom'));
var
fie=[];
for(var
i=0;i<fields.length;i++)
{
//x.add(
var
temp=
{
xtype
:
'checkboxfield',
boxLabel
:
cl[i].header,
//inputValue
:
fields[i].name,
checked:true,
itemId:i,
name
:
'custom',
listeners
:
{
change
:
function(th,
value,
oldValue,eop)
{
var
t=grid_a.columnManager.headerCt.items.get(th.itemId);
//console.log(t.isVisible());
//console.log('break');
if(t.isVisible()){
t.setVisible(false);
}
else{
t.setVisible(true);
}
//console.log(t.isVisible());
//var
t1=grid_a.columnManager.headerCt.items.get(th.itemId);
//console.log(t1);
//grid_a.columns[3].setVisible(false);
}}
};
//console.log(temp);
fie.push(temp);
}
//console.log(fie);
x.add(fie);
思路就是先循环组好需要生成的组件对象,然后一次add,每一次add的开销非常大,变为一次速度真的提升了很多很多~
⑼ extjs4.0 grid 行编辑 之后保存失败
var records = storeERP.getUpdatedRecords();//这句可以获取所有改变的值
alert(records);
Ext.Array.each(records, function(model) {
itemID = Ext.decode(model.data.BB002);
arr.push(itemID);
comID = Ext.JSON.encode(model.data.MW002);
alert(comID);
array.push(comID);
});
然後,全部提交,也就是一次性提交就好了,
你这样试试看,一次性提交