[size=xx-small][/size]想问一下,怎样让下面的表格只显示上面表格选中的2行
[b]问题补充:[/b]
我的问题是,是否可以通过var records = grid1.getSelections();记录选中的行信息,然后把这个records数据传递给grid2里面的[align=left][/align]store里面的[align=left][/align]data,这里我不知道怎么处理或者有其他方法吗?
[b]问题补充:[/b]
[img][/img]
[b]问题补充:[/b]
[color=darkred][/color][color=darkred][/color]
var rowSelect =grid1.getSelectionModel().getSelections();//返回数组
rowSelect[0] rowSelect[1] //返回Record
我能在grid1里直接调用grid2里的store吗?
grid2.store.add( rowSelect[0] );
grid2.store.add( rowSelect[1] );
还是
grid2.getStore.add( rowSelect[0]);
grid2.getStore.add( rowSelect[1]);
能不能具体一点,直接能用的,这一块语法我有些晕乎。
[b]问题补充:[/b]
是上面的过滤到下面
[b]问题补充:[/b]
非常感谢大家的帮忙。atian25 给的例子的效果是我想要的。我是要实现组件横排。grid2只能用id返回吧。照着那个例子改了下,现在问题是配置sm1时,运行出错,不知怎么回事?效果如图
[code="java"][/code]
<br> Ext.onReady(function(){<br> Ext.BLANK_IMAGE_URL = '../../extjs2.0/resources/images/default/s.gif';<br> var sm1= new Ext.grid.CheckboxSelectionModel(<br> [color=blue]/*<br> listeners:{<br><br> 'rowselect':function(sm,rowIndex,record){<br><br> Ext.getCmp('grid2').getStore().add(record);<br><br> },<br><br> 'rowdeselect':function(sm,rowIndex,record){<br><br> Ext.getCmp('grid2').getStore().remove(record);<br><br> }<br><br> }<br><br> */[/color]<br> );<br> var sm2 = new Ext.grid.CheckboxSelectionModel();<br><br> var form = new Ext.form.FormPanel({<br> title:'通过布局嵌套实现表单横排',<br> labelSeparator :':',//分隔符<br> labelWidth : 50,//标签宽度<br> bodyStyle:'padding:5 5 5 5',//表单边距<br> frame : false,<br> height:600,<br> width:600,<br> applyTo :'form',<br> items:[<br> {<br> xtype : 'panel',<br> layout : 'column',//嵌套列布局<br> border : false,//不显示边框<br> height:150,<br> defaults : {//应用到每一个子元素上的配置<br> border : false,//不显示边框<br> layout : 'form',//在列布局中嵌套form布局<br> columnWidth : .9//列宽<br> },<br> items : [<br> {<br> labelSeparator :':',//分隔符<br> items : {<br> xtype : 'grid',<br> width: 400,<br><br> height: 140,<br><br> autoScroll: true,<br><br> trackMouseOver:false,<br><br> sm:sm1,<br><br> columns: [<br><br> sm1,<br><br> {header: '序号', dataIndex: 'id', sortable: true },<br><br> {header: '名字', dataIndex: 'name', sortable: true},<br><br> {header: '描述', dataIndex: 'descript', sortable: true}<br><br> ],<br><br> store:new Ext.data.SimpleStore({<br><br> fields:['id','name','descript'],<br><br> data:[<br><br> [1,'name001','this is name001'],<br><br> [2,'name002','this is name002'],<br><br> [3,'name003','this is name003'],<br><br> [4,'name004','this is name004']<br><br> ]<br><br> })<br><br> }<br> }<br> ]<br> },</p> <pre><code> { xtype : 'panel', layout : 'column',//嵌套列布局 border : false,//不显示边框 defaults : {//应用到每一个子元素上的配置 border : false,//不显示边框 layout : 'form',//在列布局中嵌套form布局 columnWidth : .5//列宽 }, items : [ { labelSeparator :':',//分隔符 items : { xtype : 'textfield', fieldLabel:'性别', anchor:'85%' } }, { items : { xtype : 'button', text:'确定' } } ] }, { xtype : 'panel', layout : 'column',//嵌套列布局 border : false,//不显示边框 defaults : {//应用到每一个子元素上的配置 border : false,//不显示边框 layout : 'form'//在列布局中嵌套form布局 }, items : [ { labelSeparator :':',//分隔符 columnWidth :.7, items : { xtype : 'grid', width: 400, height: 140, id:'grid2', autoScroll: true, trackMouseOver:false, sm:sm2, columns: [ sm2, {header: '序号', dataIndex: 'id', sortable: true }, {header: '名字', dataIndex: 'name', sortable: true}, {header: '描述', dataIndex: 'descript', sortable: true} ], store:new Ext.data.SimpleStore({ fields:['id','name','descript'] }) } }, { columnWidth :.3, items : [{ xtype : 'button', text:'查询', handler : function(){} }, { xtype : 'button', text:'删除' } ] } ] } ] }) }); </code></pre> <p>
[b]问题补充:[/b]
[quote]你是不是要在上面选几个课题组,然后把属于这个课题组的人员在下面的grid中选中?
[/quote]
呵呵,其实第二个表格开始是空表,第一个表格选中的加进去就好了。现在那个sm1里面的配置加上后运行不出来,去掉就可以,我也想直接用grid2.getStore().add(record); 不过我用的xtype,这种方式用不了,不知道怎样调用grid2,用Ext.getCmp('grid2').getStore().add(record); 有问题吗?
[quote]var sm1= new Ext.grid.CheckboxSelectionModel(
/*
listeners:{
'rowselect':function(sm,rowIndex,record){
Ext.getCmp('grid2').getStore().add(record);
},
'rowdeselect':function(sm,rowIndex,record){
Ext.getCmp('grid2').getStore().remove(record);
}
}
*/
); [/quote]
改成这样...
var sm1= new Ext.grid.CheckboxSelectionModel( {
listeners:{
'rowselect':function(sm,rowIndex,record){
Ext.getCmp('grid2').getStore().add(record);
},
'rowdeselect':function(sm,rowIndex,record){
Ext.getCmp('grid2').getStore().remove(record);
}
}
});
把下面表格的store 里的data 处理一下就行了吧..
上面表格选中两行.会产生一个动作。用这个动作绑定下面两行
比如
gridbind = function() {
grid.store.reload();
}
Ext.getCmp('country').addListener('select', gridbind);
应该可能吧..
grid1 加个rowselect 事件
var rowSelect =grid.getSelectionModel().getSelections();//返回数组
rowSelect[0] rowSelect[1] //返回Record
加到grid2的store里...
store.add( rowSelect[0] );
store.add( rowSelect[1] );
你要的是上面的Grid选择后过滤下面的Grid,还是选择后添加记录到下面的Grid?
添加记录到下面的Grid:
[code="javascript"]
Ext.onReady(function(){
Ext.BLANK_IMAGE_URL = '/images/s.gif';
Ext.QuickTips.init();
testMuliGrid();
});
function testMuliGrid(){
//关键点
var sm1 = new Ext.grid.CheckboxSelectionModel({
listeners:{
'rowselect':function(sm,rowIndex,record){
grid2.getStore().add(record);
},
'rowdeselect':function(sm,rowIndex,record){
grid2.getStore().remove(record);
}
}
});
var grid1 = new Ext.grid.GridPanel({
width: 800,
height: 200,
autoScroll: true,
trackMouseOver:false,
sm:sm1,
columns: [
sm1,
{header: '序号', dataIndex: 'id', sortable: true },
{header: '名字', dataIndex: 'name', sortable: true},
{header: '描述', dataIndex: 'descript', sortable: true}
],
viewConfig:{
forceFit:true
},
renderTo:document.body,
store:new Ext.data.SimpleStore({
fields:['id','name','descript'],
data:[
[1,'name001','this is name001'],
[2,'name002','this is name002'],
[3,'name003','this is name003'],
[4,'name004','this is name004']
]
})
});
var sm2 = new Ext.grid.CheckboxSelectionModel({});
var grid2 = new Ext.grid.GridPanel({
width: 800,
height: 200,
autoScroll: true,
trackMouseOver:false,
sm:sm2,
columns: [
sm2,
{header: '序号', dataIndex: 'id', sortable: true },
{header: '名字', dataIndex: 'name', sortable: true},
{header: '描述', dataIndex: 'descript', sortable: true}
],
viewConfig:{
forceFit:true
},
renderTo:document.body,
store:new Ext.data.SimpleStore({
fields:['id','name','descript']
})
});
}
[/code]
[quote]
grid2.store.add( rowSelect[0] );
grid2.store.add( rowSelect[1] );
还是
grid2.getStore.add( rowSelect[0]);
grid2.getStore.add( rowSelect[1]);
能不能具体一点,直接能用的,这一块语法我有些晕乎。
[/quote]
grid2.store 或 grid2.getStore()
前者直接找对象,后者通过get方法获取.
而grid2.getStore必然报错
[quote]grid2.getStore.add( rowSelect[0]);
grid2.getStore.add( rowSelect[1]); [/quote]
是这个...你有不懂的地方..看API应该就懂了..
grid2.getStore返回的是grid2的store
add(record)方法是添加record到sotre
[quote]是上面的过滤到下面 [/quote]
就是上面选中的添加到下面的表格吧..
就是
[code="java"]grid2.getStore.add( rowSelect[0]);
grid2.getStore.add( rowSelect[1]); [/code]
我糊涂了...
你2个grid显示的原始内容是一样的?
上面的选择某些列后,下面的根据上面选择的名字来过滤下面的?
还是咋样?
仔细描述下需求吧....
[code="js"]var records = grid1.getSelections();
for(var i=0; i< records.length; i++){
grid2.getStore().insert(0,records[i];
}[/code]
你是不是要在上面选几个课题组,然后把属于这个课题组的人员在下面的grid中选中?
[quote]grid2.getStore().add(record); 不过我用的xtype,这种方式用不了,不知道怎样调用grid2,用Ext.getCmp('grid2').getStore().add(record); 有问题吗? [/quote]
用xtype有问题吗?我写的grid2是对象,..你只要得到这个对象就行了..
Ext.getCmp('grid2')..不就获取grid2的组件对象...
另外还有其他几种获取对象的方法...
报啥错?
至于xtype,没啥关系.
你可以指定ID,然后getCmp.
当然,如果你觉得这样不优雅的话,就用
find( String prop, String value ) : Array
Find a component under this container at any level by property
Container
findBy( Function fn, [Object scope] ) : Array
Find a component under this container at any level by a custom function. If the passed function returns true, the com...
Container
findById( String id ) : Ext.Component
Find a component under this container at any level by id
Container
[b]findByType( String/Class xtype, [Boolean shallow] ) : Array
Find a component under this container at any level by xtype or class[/b]
等方法.
或者你遍历父容器的item,然后根据某个特征找到它。
另外,3.0里面新增了个itemId