悬浮鼠标到Ext.GridPanel上的某一行上时,加深颜色.

Ext.GridPanel自动的会在鼠标移动到某一行上的时候加深这行的颜色.
现在客户说要颜色更鲜艳点. 要怎么才能捕捉mouseover事件?
我看了下API.
overCls是个很有用的属性,当我移动鼠表到组件上时,加上颜色; 而移开鼠标,颜色消除.

我要的就这样的效果,只是不知道怎么才能把加overCls到表格的行上去.
[b]问题补充:[/b]
==================================>

天猪:
可能我没表达清楚.
我只期望在悬浮在行上的时候.该行变色.
离开这一行,行色变回来.

overCls这个属性加在哪呢?
如果加在gridPanel上,鼠标移到grid上,整个grid都变色了.

2个回答

o,那就覆盖x-grid3-row-over这个class就ok了.

在html中定义css
.myOver{

}

在js中
overCls:'myOver'

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
EXT.GridPanel长度超出DIV出滚动条的问题
我把EXT.GridPanel放到一个DIV里面 DIV只占页面的50% 但是EXT.GridPanel里面有很多列 怎么样使DIV不超过DIV,只有横向的滚动条? 谢谢了 我用的是EXT2.0版本的。
Ext.grid.GridPanel重用的问题
创建了一个grid,希望能够在两个不同的地方重用,第一个地方是放在content-panel,第二个地是放在window中,代码如下: [code="js"] //创建grid var grid1 = new Ext.grid.GridPanel({ id: 'grid1', store: store1, tbar: [ '搜索: ', ' ', new Ext.app.SearchField({ width:240, store: store1, paramName: 'q' }) ], columns: [ {header: "id", width: 120, hidden: true, dataIndex: 'id'}, {header: "业务系统名称", width: 120, sortable: true, dataIndex: 'systemName'}, {header: "业务功能编号", width: 120, sortable: true, dataIndex: 'functionID'}, {header: "业务功能名称", width: 120, sortable: true, dataIndex: 'functionName'} ], sm: new Ext.grid.RowSelectionModel({ singleSelect: true, listeners: { rowselect: function(sm, row, rec) { //action } } }), stripeRows: true, height:350, width:600, // paging bar on the bottom bbar: new Ext.PagingToolbar({ pageSize: 25, store: store1, displayInfo: true, displayMsg: 'Displaying records {0} - {1} of {2}', emptyMsg: "No records to display" }) }); //在content-panel中显示grid1 Ext.getCmp('content-panel').add(grid1); Ext.getCmp('content-panel').layout.setActiveItem('grid1'); grid1.store.load(); //在window中显示grid1 function showGrid1Window() { if(!win){ win = new Ext.Window({ layout:'fit', width:700, closeAction:'hide', plain: true, items: grid1, buttons: [{ text: 'Close', handler: function(){ win.hide(); } }] }); } grid1.store.reload(); //grid1.show(); win.show(); } [/code] 现在遇到了两个问题: 1、在content-panel中显示grid1后显示别的内容,grid1变为隐藏,这时再调用在window中显示grid1,grid1就无法显示,即使调用grid1.show()也没有用,怎么解决? 2、我希望能够在两个地方rowselect时有不同的处理,如何能够做到?即使我用最笨的办法,用同样的代码生成一个grid2,两个共用store1,只是rowselect中的处理不一样,但只要调用过一次grid1,那么grid2的rowselect也会变成跟grid1一样,不知是什么原因? [b]问题补充:[/b] 能解释一下为什么吗? 代码有这样一句:Ext.getCmp('content-panel').layout.setActiveItem('grid1');,去掉后会报错的 [b]问题补充:[/b] 第一个问题明白了,非常感谢 我刚才用了两个grid试了一下,发现第二个问题描述的不准确。操作是这样的: 显示grid1 -> 选择某一行(触发rowselect) -> 显示另外一个组件(隐藏grid1) -> 在window中显示grid2。 这时出现一个问题,grid1的rowselect自动被触发了,而且就是我刚才选的那行。两个grid的sm是分别定义的,请问是怎么回事? [b]问题补充:[/b] 找到原因了,是因为共用了store,只要一reload就会触发grid1上次的rowselect,但实在想不明白,谁能解释一下?
Ext.data.GridPanel is not constructor 错误如何处理?
<pre name="code" class="java"> &lt;script type="text/javascript"&gt; Ext.onReady(function(){ var _grid=new Ext.data.GridPanel({ renderTo:Ext.getBody(), store:new Ext.data.JsonStore({ data:[{name:"余学武",age:31,sex:"男"},{name:"方丽",age:27,sex:"女"}], fields:["name","age","sex"] }), columns:[{header:'姓名',indexData:'name'},{header:'年龄',indexData:'age'},{header:'性别',indexData:'sex'}] }); }); &lt;/script&gt; </pre><br /><strong>问题补充</strong><br />找了很久都没有找到错在那里,请各位老大帮忙看看,谢谢了
Ext.GridPanel的columns里添加的items如何隐藏?
![图片说明](https://img-ask.csdn.net/upload/201611/14/1479107661_219597.png) ![图片说明](https://img-ask.csdn.net/upload/201611/14/1479107661_279029.png) Extjs为3.3 如果可以按条件隐藏某一行的那再好不过了,哪位大牛告知一下?
extjs Ext.grid.GridPanel组件使用时不显示数据
一.extjs grid 页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="<%=path %>/ext/resources/css/ext-all.css"/> <script type="text/javascript" src="<%=path %>/ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="<%=path %>/ext/ext-all.js"></script> <script type="text/javascript"> Ext.onReady(function(){ //handleMouseDown:Ext.emptyFn此属性去取消单击行选中复选框 singleSelect:true此属性是取消按shft多选 //创建表的列模型 var cm = new Ext.grid.ColumnModel([ {header:'编号',dataIndex:'id',sortable:true}, {header:'名称',dataIndex:'name'}, {header:'描述',dataIndex:'descn'} ]); //创建数据存储对象 var store = new Ext.data.Store({ proxy:new Ext.data.HttpProxy({url:'<%=path%>/data.jsp'}), reader:new Ext.data.JsonReader({ totalProperty:'totalProperty', root:'root' },[ {name:'id'}, {name:'name'}, {name:'descn'} ]) }); //store.load();//如果配置了Ext.PagingToolbar分页工具条 那么store.load()就要在Grid后执行 //用GrinPanel装配 var grid = new Ext.grid.GridPanel({ renderTo:'grid', //渲染范围 loadMask:true, //是否加载提示 store:store, //数据存储对象 cm:cm, //列模型 stripeRows:true, //是否隔行变色 enableColumnMove:true, //列是否可拖拽 enableColumnResize:true,//列宽是否可拖拽改变大小 autoHeight:true, width:700, viewConfig:{ columnsText:'显示的列', scrollOffset:30, sortAscText:'升序', sortDescText:'降序', forceFit:true }, bbar:new Ext.PagingToolbar({ pageSize:6, store:store, displayInfo:true, displayMsg:'显示第{0}条到{1}条记录,一共{2}条', emptyMsg:'没有记录' }) }); store.load({params:{start:1,limit:6}}); }); </script> </head> <body> <div id="grid"></div> </body> </html> 二.提供json数据页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% String start = request.getParameter("start"); String limit = request.getParameter("limit"); try { int index = Integer.parseInt(start); int pageSize = Integer.parseInt(limit); String json = "{totalProperty:100,root:["; for (int i = index; i < pageSize + index; i++) { json += "{id:" + i + ",name:name" + i + ",descn:descn" + i + "}"; if (i != pageSize + index - 1) { json += ","; } } json += "]}"; out.print(json); } catch (Exception e) { e.printStackTrace(); } %> </body> </html>
Ext.grid.GridPanel不显示数据怎么解决?
Ext.onReady(function() { var ds = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: "GetQuestionList.aspx", method: 'GET' }), reader: new Ext.data.JsonReader( { root: 'data', totalProperty: 'totalCount' }, [{ name: 'title', mapping: 'title' }, { name: 'type', mapping: 'type' }, { name: 'ct', mapping: 'ct' }, { name: 'state', mapping: 'state'}] ) }); var pagingBar = new Ext.PagingToolbar({ pageSize: 5, store: ds, displayInfo: true, displayMsg: 'Displaying topics {0} - {1} of {2}', emptyMsg: "No topics to display" }); var gv = new Ext.grid.GridPanel({ title: '问题列表', el: 'divGvList', width: 800, height: 500, autoScroll: true, loadMask: { msg: '正在加载数据,请稍侯……' }, store: ds, columns: [ new Ext.grid.RowNumberer(), { header: '标题', dataIndex: 'title', sortable: true }, { header: '分类', dataIndex: 'type', sortable: true }, { header: '时间', dataIndex: 'ct', sortable: true, renderer: Ext.util.Format.dateRenderer('Y.m.d') }, { header: '回复状态', dataIndex: 'state', sortable: true } ], bbar: pagingBar }); gv.render(); ds.load({ params: { start: 0, limit: 5} }); }); 这个GetQuestionList.aspx页面我单独用在ie地址栏输入GetQuestionList.aspx?start=0&limit=5,页面输出如下数据 { 'data': [ { 'title': '0_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '1_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '2_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '3_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '4_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '5_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '6_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '7_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '8_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true }, { 'title': '9_标题', 'type': '分类', 'ct': '2009-7-3 11:49:58', 'state': true } ], 'totalCount': 10 } 不知道为什么就是显示不了数据,请大家帮忙看看到底问题出在哪了? [b]问题补充:[/b] 我试了,还是不行 [b]问题补充:[/b] 郁闷,还是不行,不知道怎么回事 现在我加了alert(ds.getCount());,弹出的提示是0 是不是表示数据集中没有数据? [b]问题补充:[/b] 都不是你们说的这些问题,我调试看了,可能是异步请求的问题 ds.load({ params: { start: 0, limit: 5 }, callback: function(r, options, success) { alert(r.length); if (success) { alert(r.length); } else { alert("加载数据失败,无对应数据或者系统出现异常!");} } }); 我这样执行后,r.length总是0, success的值为false 有没有人知道是怎么回事 [b]问题补充:[/b] 问题解决了,GetQuestionList.aspx页面代码Response.Write(jsonStr);执行后还要加上 Response.Flush(); Response.Close();这两句代码,数据才能发送到客户端,那个回调函数success的值为true了,总算搞定了,不过还是要感谢各位帮忙!
Ext如何实现当鼠标放在某行字体自动变黑变大
当鼠标指针指向一行数据时,这行数据变粗变黑,该如何设置。展现列表用的是Ext.grid.GridPanel
Ext.GridPanel采用autowidth,为啥表头和表格内容不一样长?
我的布局如下: 一个大panel里分左右部分.左边是个panel.这个panel里包含一个grid; 右边也是个panel [img]/upload/attachment/129381/fea69567-e868-3d0f-8b32-239e88f3321f.jpg[/img] 中间那根竖线是可以左右拖动的. 当我把竖线往左拖的时候,会发现grid的表头和表格内容明显对不上了. 如附件如所示. [img]/upload/attachment/129383/e9350bf1-6834-3426-bd55-13aea92c3ad3.jpg[/img] 外面的大panel采用border布局. grid所在的panel居中.采取auto的布局方式. grid所在的panel和grid自身都采取autowidth方式 [b]问题补充:[/b] 其实左边的panel里并不是只有grid. 真实的情况是,上面是grid,下面又有一个panel. yourgame,如果按您的方法,左边panel的布局采用layout:'fit' 问题也是存在的. 而且还会把下面那个panel往下赶.这里我采用layout:'auto'是可行的. 就是在拖动中间那根线的时候,表格会撑出来... :cry:
关于一个 new Ext.app.SearchField的问题
[color=darkred][/color]下面红色显示的部分是一个查询框,但是没有效果,有什么问题? 他是更具那个属性查的,我要指定按照某一属性查询该怎么做? var grid_daily_hq = new Ext.grid.GridPanel({ autoScroll:true, autoShow:true, border: false, store: store_daily_hq, stripeRows:true, cm:cm, sm: new Ext.grid.RowSelectionModel({singleSelect:true}), pageSize: pagesizes, autoExpandColumn:'name', frame:true, [color=red]tbar: ['合同查询: ',' ',new Ext.app.SearchField({ store: store_daily_hq, width:250 })],[/color] bbar : pagingBar_daily_hq, view: new Ext.grid.GroupingView({ forceFit:true, groupTextTpl: '{text} ({[values.rs.length]} {["条"]})' }), iconCls:'icon-grid' });
EXT中GridPanel的Header 显示问题
学习EXT的过程中遇到了一个问题,就是 GridPanel中的Columns属性下的Header属性无法在页面中显示,不知道是为什么, 代码如下 var grid = new Ext.grid.GridPanel({ store: store, ddGroup: 'treeDD', border: false, enableDrag: true, columns: [{ id: 'id', header: '用户ID', autoWidth: true, width: 80, dataIndex: 'id', sortable: true }, { header: '用户姓名', width: 80, dataIndex: 'name', sortable: true }, { header: '联系电话', width: 80, dataIndex: 'tele', sortable: true }], stripeRows: true, autoExpandColumn: 1 }); [b]问题补充:[/b] 就是一个表格,本该是这样的 用户ID 用户姓名 联系电话 1 XXX XXXXX 2 xxx xxxx 不过,最上面的 ’ 用户ID 用户姓名 联系电话‘这一行 不会显示任何东西,是空白一片 [b]问题补充:[/b] 我用的是2.2的,以前做毕设时 HEADER部分都可以正常显示,这次练习时反而显示不出来了 [b]问题补充:[/b] 说实话,这个也不是每次写GridPanel时都出现,是时不时的偶尔的不是经常的 好出现~~~我是没招了,不过在上面这段代码里 还是没能解决的了
ext2.x中GridPanel本地数据分页的问题
由于数据量不多,大概3,40条,不分页又太长了,又不想服务器分页(很多东西写死了不好改),琢磨了一下怎么本地分页,还是没搞出来,请大家指点一下,我是用store的loadData把数据载入,PagingToolbar读到了数据,但是无法分页,也想不出来该怎么改了 [code="js"] cxtjFormPanel = Ext.extend(Ext.form.FormPanel,{ constructor:function(){ this.addEvents("query"); this.addEvents("reset"); cxtjFormPanel.superclass.constructor.call(this,{ autoHeight:true, baseCls:"x-plain", layout:"column", width:550, labelWidth:80, items:[ { columnWidth:.5, defaults:{width:160}, defaultType:"textfield", bodyStyle:"padding:5px", layout:"form", items:[ { fieldLabel:"案件登记序号", name:"ajdjXh", maxLength:14 },{ fieldLabel:"纳税人编码", name:"nsrbm", maxLength:20 } ] },{ columnWidth:.5, defaults:{width:160}, defaultType:"textfield", bodyStyle:"padding:5px", layout:"form", items:[ { fieldLabel:"案源登记序号", name:"aydjXh", maxLength:14 },{ fieldLabel:"纳税人名称", name:"nsrmc" } ] } ], buttons:[ { text:"查询", handler:function(){ try{ this.onQuery(); }catch(e){ return; } }, scope:this },{ text:"清空", handler:function(){ this.onReset(); }, scope:this } ] }); }, onQuery:function(){ if(this.getForm().isValid()) this.fireEvent("query",this.getForm()); else throw Error(); }, onReset:function(){ this.fireEvent("reset",this.getForm()); } }); ajxxGridPanel = Ext.extend(Ext.grid.GridPanel,{ data:null, constructor:function(){ this.addEvents("delete"); this.data = new Ext.data.JsonStore({ fields:["ajdjxh","aydjxh","nsrmc","ajmc","ajzt"] }), ajxxGridPanel.superclass.constructor.call(this,{ title:"案件信息列表", autoHeight:true, frame:true, width:660, loadMask:{msg:"正在加载,请稍后..."}, tbar:[ { text:"删除案件", handler:function(){ try{ this.onDelete(); }catch(e){ Ext.Msg.alert("提示","请选择要删除的案件!"); return; } }, scope:this },"-" ], columns:[ new Ext.grid.CheckboxSelectionModel(), {header:"案件编号",dataIndex:"ajdjxh",width:100}, {header:"案源编号",dataIndex:"aydjxh",width:100}, {header:"纳税人名称",dataIndex:"nsrmc",width:170}, {header:"案件名称",dataIndex:"ajmc",width:170}, {header:"案件状态",dataIndex:"ajzt",width:110} ], store:this.data, // bbar: new Ext.PagingToolbar({ // pageSize: 10, // store:this.data, // displayInfo: true, // displayMsg: '第{0} 到 {1} 条数据 共{2}条', // emptyMsg: "没有数据" // }), sm:new Ext.grid.RowSelectionModel({ singleSelect:true }) }); }, loadData:function(_data){ this.getStore().loadData(_data,false); }, onDelete:function(){ if(this.getSelectionModel().getCount()>0) this.fireEvent("delete",this,this.getStore(),this.getSelectionModel().getSelected()); else throw Error(); } }); ViewPanel = Ext.extend(Ext.Panel,{ form:null, grid:null, constructor:function(){ this.form = new cxtjFormPanel(); this.grid = new ajxxGridPanel(); ViewPanel.superclass.constructor.call(this,{ title:"删除案件信息", plain:true, frame:true, autoHeight:true, //height:450, items:[ this.form, this.grid ] }); } }); Ext.onReady(function(){ Ext.QuickTips.init(); Ext.form.TextField.prototype.msgTarget = "side"; var _view = new ViewPanel(); _view.render(Ext.getBody()); _view.form.on("query",function(_form){ //_form["waitMsgTarget"] = this.getEl(); _form.submit({ url:"/qt/qt036JcScajxxExt-query.pfv", waitMsg:"正在查询,请稍后...", success:function(_f,_a){ this.grid.loadData(_a.result.data); }, failure:function(_f,_a){ Ext.Msg.alert("错误","查询失败!"); }, scope:this }); },_view); _view.form.on("reset",function(_form){ _form.reset(); },_view); _view.grid.on("delete",function(_grid,_store,_record){ Ext.Msg.confirm("提示","是否删除案件["+_record.data.ajmc+"]?",function(_btn){ if(_btn=="yes"){ this.grid.getEl().mask("正在删除,请稍后..."); Ext.Ajax.request({ url:"/qt/qt036JcScajxxExt-delete.pfv", params:{ajdjXh:_record.data.ajdjxh,aydjXh:_record.data.aydjxh}, success:function(_response){ var _result = Ext.util.JSON.decode(_response.responseText); if(_result.state == "info"){ _store.remove(_record); } Ext.Msg.alert("提示",_result.message); this.grid.getEl().unmask(); }, failure:function(){ Ext.Msg.alert("错误","删除案件失败!"); this.grid.getEl().unmask(); }, scope:this }); } },this) },_view); }); [/code]
继承Ext.panel的子类实例化出错:this.add() is not a function
[code="java"] Ext.namespace("SXP.Ext"); SXP.Ext.WelcomePage = Ext.extend(Ext.Panel, { id : 'desktop_index', title : '首 页', closable : false, autoScroll : true, layout : "fit", border : false, getAjaxRequest : function() { Ext.Ajax.request({ url : 'util?cmd=loadOnStart', success : function(response) { this.respText = Ext.decode(response.responseText); this.store1 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.news }); this.store2 = new Ext.data.SimpleStore({ fields : ['column', 'value'], data : this.respText.statist }); this.store3 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.notice }); this.store4 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.rule }); this.store5 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.mannual }); this.store6 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.faq }); }, failure : function() { Ext.MessageBox.show({ title : '系统提示', msg : '加载首页数据时出错了!', buttons : Ext.MessageBox.OK, icon : Ext.MessageBox.WARNING }); } }); }, fresh : function() { if (this.store1 != null) { this.store1.removeAll(); this.store2.removeAll(); this.store3.removeAll(); this.store4.removeAll(); this.store5.removeAll(); this.store6.removeAll(); } this.getAjaxRequest(); }, createWin : function(width, height, type) { var desc = ""; if (type == 'news') desc = "最新新闻报道"; else if (type = 'rule') desc = "系统运行规范"; else if (type == 'notice') desc = "系统动态通知"; else if (type == 'mannual') desc = "系统操作说明书"; else if (type == 'faq') desc = "系统第一次使用必读"; var win = new Ext.Window({ width : width, height : height, title : desc, modal : true, resizable : false, items : [{ xtype : 'tabpanel', id : 'read_detail', autoLoad : { url : "", nocache : false, scripts : true } }] }); return win; }, buildComponent: function(){ Ext.Ajax.request({ url : 'util?cmd=loadOnStart', success : function(response) { Ext.MessageBox.hide(); this.respText = Ext.decode(response.responseText); this.store1 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.news }); this.store2 = new Ext.data.SimpleStore({ fields : ['column', 'value'], data : this.respText.statist }); this.store3 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.notice }); this.store4 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.rule }); this.store5 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.mannual }); this.store6 = new Ext.data.SimpleStore({ fields : ['type', 'id', 'title', 'date'], data : this.respText.faq }); this.containerPanel = new Ext.Panel({ border : false, layout : 'table', bodyStyle : 'margin:0;padding:0',// background:#DFE8F6; layoutConfig : { columns : 3 }, defaults : { frame : false }, tbar : new Ext.Toolbar({ id : 'tbar_welcome', items : ['-', { xtype : 'button', text : '刷新本页', iconCls : 'refresh', handler : this.fresh, scope : this }, '-'] }), items : [{ columnWidth : .35, title : '最新新闻报道', hideBorders : true, hideHeaders : true, collapsible : true, style : 'padding:5px', height : 300, frame : false, viewConfig : { forceFit : true }, loadMask : true, items : new Ext.grid.GridPanel({ border : false, store : this.store1, columns : [{ width : '75%', dataIndex : 'title', renderer : this.renderTitle }, { width : '25%', dataIndex : 'date' }] }) }, { columnWidth : .30, title : '系统运行统计', style : 'padding:5px;paddingLeft:0', height : 300, collapsible : true, viewConfig : { forceFit : true }, hideHeaders : true, loadMask : true, frame : false, items : new Ext.grid.GridPanel({ border : false, store : this.store2, columns : [{ width : '60%', dataIndex : 'column' }, { width : '40%', dataIndex : 'value' }] }) }, { columnWidth : .35, title : '系统动态通知', html : '<p align="right"><a href="javascript:moreNotice()">More>></a>&nbsp;&nbsp;</p>', style : 'padding:5px;paddingLeft:0', height : 300, collapsible : true, viewConfig : { forceFit : true }, hideHeaders : true, loadMask : true, frame : false, items : new Ext.grid.GridPanel({ border : false, store : this.store3, columns : [{ width : '75%', dataIndex : 'title', renderer : this.renderTitle }, { width : '25%', dataIndex : 'date' }] }) }, { columnWidth : .35, title : '系统运行规范', hideBorders : true, hideHeaders : true, collapsible : true, shadow : true, floating : false, style : 'padding:5px', height : 240, frame : false, viewConfig : { forceFit : true }, loadMask : true, items : new Ext.grid.GridPanel({ border : false, store : this.store4, columns : [{ width : '75%', dataIndex : 'title', renderer : this.renderTitle }, { width : '25%', dataIndex : 'date' }] }) }, { columnWidth : .30, title : '系统操作说明书', style : 'padding:5px;paddingLeft:0', height : 240, collapsible : true, viewConfig : { forceFit : true }, hideHeaders : true, frame : false, loadMask : true, items : new Ext.grid.GridPanel({ border : false, store : this.store5, columns : [{ width : '70%', dataIndex : 'title', renderer : this.renderTitle }, { width : '30%', dataIndex : 'date' }] }) }, { columnWidth : .35, title : '系统第一次使用必读', style : 'padding:5px;paddingLeft:0', height : 240, collapsible : true, viewConfig : { forceFit : true }, hideHeaders : true, loadMask : true, frame : false, items : new Ext.grid.GridPanel({ border : false, store : this.store6, columns : [{ width : '75%', dataIndex : 'title', render : this.renderTitle }, { width : '25%', dataIndex : 'date' }] }) }] });this.add(this.containerPanel); }, failure : function() { Ext.MessageBox.hide(); Ext.MessageBox.show({ title : '系统提示', msg : '加载首页数据时出错了!', buttons : Ext.MessageBox.OK, icon : Ext.MessageBox.WARNING }); } }); }, readDetail : function(type, id) { if (!this.win) { this.win = this.createWin(700, 340, type); } this.win.show(); }, renderTitle : function(value, p, record) { return String.format( '<b><a href="javascript:readDetail(\"{2}\",{0})">{1}</a></b><br/>', record.id, value, record.type) }, initComponent : function() { SXP.Ext.WelcomePage.superclass.initComponent.call(this); Ext.MessageBox.show({ title : '请稍候', msg : '数据正在加载中....', icon : Ext.MessageBox.INFO, closable : false }); this.on("render", this.buildComponent, this); } }); [/code] 恳请解答,3Q!
Ext.grid.PropertyGrid里的内容如何设置居右
[code="java"] cis.repository.smap.PropertyGridPanel.superclass.constructor.call(this, { id : 'propGrid', title : this.resourceBundle.FieldLabel.RESULT, frame : true, // autoHeight:true, hideHeaders : true, autoWidth : true, nameWidth : 400, valueWidth : 600, source : {} }); Ext.extend(cis.repository.smap.PropertyGridPanel, Ext.grid.PropertyGrid, {});[/code] 如何设置PropertyGridPanel里固定左边表头居右,右边输出内容居左呢??? 很急啊,请教大家了 [b]问题补充:[/b] 楼下的 这个样式放哪里 能否详细点,你这样我还是不清楚。 [b]问题补充:[/b] 我是需要source里的固定的表头居右,输出内容居左。 这样式往哪里加啊? [b]问题补充:[/b] 你有QQ 或MSN 吗, 我这问题很急 [b]问题补充:[/b] 这个好像没有用 [b]问题补充:[/b] 这是我的JSP页面setUserInfo.jsp,按你的加了样式 [code="java"]<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="../../../common/gui_lib.jsp"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="../../../scripts/repository/ux/XPropertyGrid.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/scripts/repository/mobilehome/setUserInfo.js"></script> <script type="text/javascript" src="../../../scripts/repository/ux/RowFitLayout.js"></script> <style> .ext-ie .x-menu-item-icon {left: -24px;} .ext-strict .x-menu-item-icon {left: 3px;} .ext-ie6 .x-menu-item-icon {left: -24px;} .x-props-grid .x-grid3-hd-name{ text-align:right; } .x-props-grid .x-grid3-td-value{ text-align:left; } </style> <script type="text/javascript"> Ext.onReady(function() { Ext.QuickTips.init(); var formpanecondition = new cis.repository.smap.QueryCondition(); var exPropertyGrid = new cis.repository.smap.PropertyGridPanel(); var view=new Ext.Viewport( { layout:'row-fit', frame:true, items:[formpanecondition,exPropertyGrid] }); view.doLayout(); renderTo:'tab1'; }); </script> </head> <body> <div id="tab1"></div> </body> </html> [/code] 这是我的JS文件setUserInfo.jsp [code="java"] Ext.ns("cis.repository.smap"); include('scripts/repository/locale/queryHomeUserInfo_zh.js'); include('scripts/repository/locale/common_zh.js'); cis.repository.smap.QueryCondition = function() { var sequenceX = new Ext.form.TextField({ allowBlank : false, fieldLabel : this.resourceBundle.FieldLabel.PHONENO, // labelSeparator : '', name : 'sequenceX', anchor : '95%' }); var queryButton = new Ext.Button({ text : BUTTON_SEARCH, minWidth : COMMONDATA_QUERY_BUTTON, handler : function() { var mk = new Ext.LoadMask("propGrid", { msg : MSG_DATA_LOADING, removeMask : true // 完成后移除 }); mk.show(); // 显示 // var updatePropertyBt = Ext.getCmp("edit-menuitem-btn"); if (sequenceX.getValue() != '') { var sequence = sequenceX.getValue(); Ext.Ajax.request({ url : '../../../extend/mobilehome/searchUserInfo.action', method : 'POST', timeout : "120000", params : { phoneNuber : sequence }, success : function(form, action) { // Ext.getCmp("propGrid").setSource({ // "msisdn" : "msisdn", // "prefAreaFlag1" : "prefAreaFlag1" // }); mk.hide(); var result = Ext.util.JSON .decode(form.responseText); // alert(result.success); // alert("result:" + result.data); // alert(result.msg); // var msisdn = "13957160043"; if (result.success == "true") { var gridPanel = Ext.getCmp("propGrid"); //alert("---="+result.data.msisdn); gridPanel.setSource({ "用户号码" : result.data.msisdn, "业务状态" : result.data.serviceState, "内部套餐号" : result.data.innerPkgid , "优惠区提醒开关" : result.data.serviceFlag1, "非优惠区提醒开关" : result.data.serviceFlag2, "提醒方式" : result.data.serviceFlag3, "业务申请时间" : result.data.createTime, "业务开通时间" : result.data.beginTime, "业务取消时间" : result.data.endtime, "最近一次提醒注册优惠区时间" : result.data.lstRegnotifyTime, "是否启用后备优惠区域1" : result.data.prefAreaFlag1, "优惠区1的一天内注册次数" : result.data.regareAcnt1, "优惠区域1的最近一次定位时间" : result.data.lstDetectTime1, "是否启用后备优惠区域2" : result.data.prefAreaFlag2, "优惠区2的一天内注册次数" : result.data.regareAcnt2, "优惠区域2的最近一次定位时间" : result.data.lstDetectTime2, "是否启用后备优惠区域3" : result.data.prefAreaFlag3, "优惠区3的一天内注册次数" : result.data.regareAcnt3, "优惠区域3的最近一次定位时间" : result.data.lstDetectTime3, "是否启用后备优惠区域4" : result.data.prefAreaFlag4, "优惠区4的一天内注册次数" : result.data.regareAcnt4, "优惠区域4的最近一次定位时间" : result.data.lstDetectTime4 }); // alert("sdkfjslfjsf"); // gridPanel.load(); // alert(result.data); // gridPanel.load(result.data); // updatePropertyBt.enable(); } else { Ext.Msg.show({ title : MSG_TITLE, msg : result.msg, buttons : Ext.Msg.OK, icon : Ext.Msg.ERROR }); } }, failure : function(form, action) { // alert("failure"); mk.hide(); Ext.Msg.show({ title : MSG_TITLE, msg : MSG_EXCEPTION, buttons : Ext.Msg.OK, icon : Ext.Msg.ERROR }); } }); } else { Ext.MessageBox.alert(MSG_TITLE, MSG_FIX_ERROR); } } }); var resetbutton = new Ext.Button({ text : this.resourceBundle.FieldLabel.RESET, handler : function() { queryPhoneNumber.reset(); } }); cis.repository.smap.QueryCondition.superclass.constructor.call(this, { id : 'websmapquerycondition', title : MSG_QUERYCONDITON, width : '100%', collapsible : true, height : 70, bodyStyle : "padding:5px 10px 5px 10px", frame : true, defaults : { anchor : '90%' }, items : [{ layout : "form", xtype : 'panel', baseCls : "x-plain", labelAlign : 'right', defaults : { baseCls : "x-plain" }, items : [{ layout : "column", items : [{ columnWidth : .33, layout : 'form', height : 25, labelAlign : 'left', labelWidth : 55, items : [sequenceX] }, { columnWidth : .1, layout : 'form', height : 25, buttonAlign : 'right', items : [queryButton] }] }] }] }); }; Ext.extend(cis.repository.smap.QueryCondition, Ext.form.FormPanel, {}); function updateFNOs(source) { var jsonDataStr = null; if (source) { jsonDataStr = Ext.encode(source); } if (jsonDataStr) { var mk = new Ext.LoadMask("propGrid", { msg : MSG_DATA_LOADING, removeMask : true }); mk.show(); var requestCg = { url : '../../../extend/mobilehome/editUserInfo.action', method : 'post', params : { jsonData : jsonDataStr }, timeout : 120000, callback : function(options, success, response) { // alert(success + "\t" + response); mk.hide(); mk.destroy(); if (!success) { Ext.MessageBox.show({ title : MSG_TITLE, msg : MSG_EXCEPTION, icon : Ext.MessageBox.ERROR, buttons : Ext.MessageBox.OK }); } else { if (response) { var infoData = Ext.decode(response.responseText); var msg = infoData.msg; var operateRslt = infoData.success; if (operateRslt && operateRslt != "true") { Ext.MessageBox.show({ title : MSG_TITLE, msg : msg, icon : Ext.MessageBox.ERROR, buttons : Ext.MessageBox.OK }); } else { Ext.MessageBox.show({ title : MSG_TITLE, msg : msg, icon : Ext.MessageBox.INFO, buttons : Ext.MessageBox.OK }); } } } } } Ext.Ajax.request(requestCg); } else { return false; } } cis.repository.smap.PropertyGridPanel = function() { var menubar = new Ext.Toolbar({ items : [{ id : 'edit-menuitem-btn', text : "修改", disabled : true, iconCls : 'edit', icon : '../../../images/default/button/edit.gif', handler : function() { var grid = Ext.getCmp("propGrid"); if (grid) { var source = grid.getSource(); updateFNOs(source); this.disable(); } } }] }); var pStore = new Ext.grid.PropertyStore({}); cis.repository.smap.PropertyGridPanel.superclass.constructor.call(this, { id : 'propGrid', title : this.resourceBundle.FieldLabel.RESULT, frame : true, // autoHeight:true, hideHeaders : true, autoWidth : true, nameWidth : 400, valueWidth : 600, // tbar : menubar, style:".x-props-grid .x-grid3-hd-name{ text-align:right;}", customEditors : { "是否启用后备优惠区域1" : new Ext.grid.GridEditor(new Ext.form.ComboBox({ editable : false, displayField : 'prefAreaFlag1', mode : 'local', triggerAction : 'all', selectOnFocus : true, store : new Ext.data.SimpleStore({ fields : ['prefAreaFlag1'], data : [['未开通'], ['使用正式优惠区'], ['使用后备优惠区']] }) })) }, source : { "用户号码" : "", "业务状态" : "", "内部套餐号" : "", "优惠区提醒开关" : "", "非优惠区提醒开关" : "", "提醒方式" : "", "业务申请时间" : "", "业务开通时间" : "", "业务取消时间" : "", "最近一次提醒注册优惠区时间" : "", "是否启用后备优惠区域1" : "", "优惠区1的一天内注册次数" : "", "优惠区域1的最近一次定位时间" : "", "是否启用后备优惠区域2" : "", "优惠区2的一天内注册次数" : "", "优惠区域2的最近一次定位时间" : "", "是否启用后备优惠区域3" : "", "优惠区3的一天内注册次数" : "", "优惠区域3的最近一次定位时间" : "", "是否启用后备优惠区域4" : "", "优惠区4的一天内注册次数" : "", "优惠区域4的最近一次定位时间" : "" }, buttons : [{ text : '提交', handler : function() { var grid = Ext.getCmp("propGrid"); if (grid) { var source = grid.getSource(); var jsonDataStr = null; if (source) { jsonDataStr = Ext.encode(source); } if (jsonDataStr) { var mk = new Ext.LoadMask("propGrid", { msg : MSG_DATA_LOADING, removeMask : true }); mk.show(); var requestCg = { url : '../../../extend/mobilehome/editUserInfo.action', method : 'post', params : { jsonData : jsonDataStr }, timeout : 120000, callback : function(options, success, response) { // alert(success + "\t" + response); mk.hide(); mk.destroy(); if (!success) { Ext.MessageBox.show({ title : MSG_TITLE, msg : MSG_EXCEPTION, icon : Ext.MessageBox.ERROR, buttons : Ext.MessageBox.OK }); } else { if (response) { var infoData = Ext .decode(response.responseText); var msg = infoData.msg; var operateRslt = infoData.success; if (operateRslt && operateRslt != "true") { Ext.MessageBox.show({ title : MSG_TITLE, msg : msg, icon : Ext.MessageBox.ERROR, buttons : Ext.MessageBox.OK }); } else { Ext.MessageBox.show({ title : MSG_TITLE, msg : msg, icon : Ext.MessageBox.INFO, buttons : Ext.MessageBox.OK }); } } } } } Ext.Ajax.request(requestCg); } else { return false; } } } }, { text : this.resourceBundle.FieldLabel.RESET, handler : function() { Ext.getCmp("propGrid").getSource(); } }], buttonAlign : 'center' }); }; Ext.extend(cis.repository.smap.PropertyGridPanel, Ext.grid.PropertyGrid, {}); [/code] [b]问题补充:[/b] 第二个是setUseInfo.js文件。 [b]问题补充:[/b] 你本地测试的NAME所对应的 ,明显是居左么。 怎么没问题啊? [b]问题补充:[/b] 我的结果: [img]http://www.iteye.com/upload/attachment/141323/d3f5de22-b4bf-378d-bd16-50245bbbe79d.jpg[/img] [b]问题补充:[/b] 我加了.x-props-grid .x-grid3-col-name{ text-align:right; } 第一列内容还是居左的。 [b]问题补充:[/b] 好了 好了,谢谢你的帮助,很感谢。EXTJS还有很多不懂的地方,希望多多指教 。 [b]问题补充:[/b] 我能知道你的MSN吗,我的是itzhoujia@hotmail.com.
升级到EXT3.3.1 点击grid中的复选框 出现this.grid is undefined错误
this.grid is undefined Line 49515 原本用2.2.1,一切正常,升级EXT3.3.1版本发现,原来的程序出现了问题,主要是在grid中的复选框,原来单击复选框可以选择或取消,现在一单击就报错“this.grid is undefined”,如果不单击复选框,单击选择行,是可以选择的,Ctrl键功能也正常,可多选和取消。 改用EXT3.2.0也是一切正常,这是何解? var cm = [ new Ext.grid.RowNumberer(), new Ext.grid.CheckboxSelectionModel(), {header:"unitCode", width: 35, dataIndex:"unitCode" }, {header:"unitDesc", width: 80, dataIndex:"unitDesc" }, {header:"langCode", width: 35, dataIndex:"langCode",hidden:true} ] var sm = new Ext.grid.CheckboxSelectionModel(); this.gridPanel = new Ext.grid.GridPanel({ region:"center", id: subTabId, applyTo: subTabId, ds: ds, cm: cm, sm: sm, viewConfig: { autoFill : true, enableRowBody:true, showPreview:true }, //columnLines: true, height:height, //autoHeight:true, autoWidth:true, stripeRows : true, shim:false, border:false, monitorResize:true, autoScroll: true, tbar:tbar, bbar:bbar }); 有没有人遇上过这个问题
在Ext.FormPanel上加上类似于gridpanel的tbar bbar的控件
RT 这是一个在window里面的formpanel,我现在就是想把文本框查询的结果集放在下面的下拉多选框里面, 现在想搞成类似于gridpanel里面的tbar控件,这样比较好看,而且传值方便点。 另外一个问题就是,我单击查询按钮之后,怎么把查询的结果集放到下拉列表的stroe中 [img]/upload/attachment/127644/cbe3ab32-545b-31ba-8072-ae3cd1da4c47.png[/img] [b]问题补充:[/b] 对哦,是啊 还有 那我单击了这个查询按钮之后,怎么把查询之后的结果返回给多选下拉的store啊?
最近遇到一个Ext.Ajax.request的奇怪问题
最近在学Extjs,照着视频做了一个提交数据并且添加store的demo,却遇到一个奇怪的问题:添加第一次的时候没有问题,添加第二次的时候就向服务器发了2次请求,添加第3次的时候就向服务器发了3次请求,导致了,第二次添加了2个相同的,第三次添加了3个相同的,请大家帮我看下是哪有写得有问题 [code="js"] Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = "side"; PersonViewFormPanel = Ext.extend(Ext.form.FormPanel,{ constructor:function(){ PersonViewFormPanel.superclass.constructor.call(this,{ id:"form", layout:"form", defaultType:"textfield", baseCls:"x-plain", style:"padding:5px", defaults:{width:175}, width:240, height:85, labelWidth:45, items:[ {fieldLabel:"姓名",id:"name"}, {fieldLabel:"性别",id:"sex"}, {fieldLabel:"年龄",id:"age"} ] }); } }); PersonInfoFormPanel = Ext.extend(Ext.form.FormPanel,{ constructor:function(){ PersonInfoFormPanel.superclass.constructor.call(this,{ layout:"form", id:"info_form", defaultType:"textfield", baseCls:"x-plain", bodyStyle:"padding:5px", defaults:{width:150}, width:240, height:85, labelWidth:45, items:[ {fieldLabel:"姓名",id:"name",allowBlank:false,blankText:"姓名必须填写!",emptyText:"必填"}, { xtype:"combo", fieldLabel:"性别", emptyText:"请选择", hiddenName:"sex", displayField:"name", valueField:"value", triggerAction:"all", mode:"local", readOnly:true, store:new Ext.data.JsonStore({ fields:["value","name"], data:[{value:0,name:"男"},{value:1,name:"女"}] }) }, {fieldLabel:"年龄",id:"age"} ] }); }, getValues:function(){ if(this.getForm().isValid()) return new Ext.data.Record(this.getForm().getValues()); else throw Error("表单验证未通过!"); }, setValues:function(_record){ this.getForm().loadRecord(_record); }, reset:function(){ this.getForm().reset(); } }); InsertPersonInfoWindow = Ext.extend(Ext.Window,{ form:null, constructor:function(){ this.form = new PersonInfoFormPanel(); InsertPersonInfoWindow.superclass.constructor.call(this,{ title:"添加人员", closeAction:"hide", height:155, width:240, modal:true, plain:true, resizable:false, items:this.form, buttons:[ { text:"确定", handler:function(){ this.onSubmitClick(); }, scope:this },{ text:"取消", handler:function(){ this.onCancelClick(); }, scope:this } ] }); this.addEvents("submit"); }, close:function(){ this.form.reset(); this.hide(); }, onSubmitClick:function(){ try{ this.fireEvent("submit",this,this.form.getValues()); }catch(e){ Ext.Msg.alert("错误",e); } }, onCancelClick:function(){ this.close(); } }); PersonListGridPanel = Ext.extend(Ext.grid.GridPanel,{ InsertWindow:null, constructor:function(){ this.InsertWindow = new InsertPersonInfoWindow(); PersonListGridPanel.superclass.constructor.call(this,{ id:"grid", width:240, autoHeight:true, tbar:[ { text:"添加", handler:function(){ this.InsertWindow.show(); this.InsertWindow.on("submit",function(_window,_record){ Ext.Ajax.request({ url:"test5.pfv", params:_record.data, success:function(_response){ Ext.getCmp("grid").getStore().add( new Ext.data.Record(Ext.util.JSON.decode(_response.responseText))); _window.close(); } }); }); }, scope:this },"-", {text:"修改"},"-", {text:"删除"} ], columns:[ {header:"姓名",dataIndex:"name",width:80}, {header:"性别",dataIndex:"sex",width:80}, {header:"年龄",dataIndex:"age",width:80} ], store:new Ext.data.JsonStore({ autoLoad:true, fields:["name","sex","age"], url:"test4.pfv" }), sm:new Ext.grid.RowSelectionModel({ singleSelect:true, listeners:{ "rowselect":{ fn:function(_rsm,_index,_record){ this.fireEvent("rowselect",_record); }, scope:this } } }) }); this.addEvents("rowselect"); } }); Ext.onReady(function(){ var _grid = new PersonListGridPanel(); // var _form = new PersonViewFormPanel(); var _window = new Ext.Window({ renderTo:Ext.getBody(), title:"测试组件化编程", resizable:false, plain:true, frame:true, items:[ _grid ] }); _window.show(); // _grid.on("rowselect",function(_record){ // this.getForm().loadRecord(_record); // },_form); }); [/code] [code="java"] @RequestMapping(value="/test5.pfv") public void test5(HttpServletRequest request, HttpServletResponse response) throws Exception { String name = request.getParameter("name"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); Map<String, String> map = new HashMap<String, String>(); map.put("name", name); map.put("sex", "0".equals(sex)?"男":"女"); map.put("age", age); JSON json = JSONObject.fromObject(map); json.write(response.getWriter()); [/code] [b]问题补充:[/b] 回复1楼,如果我把Ext.Ajax.request注掉,直接把record add到store里面又没有问题,不存在多次执行操作的问题
EXT, 用gridPanel的时候出现了一个小问题
在用gridPanel的时候,重定义了Column 的时候,第一次加载的时候数据没有显示,记录的总数显示了, 我有是 gridPanel = new Ext.grid.GridPanel({ defaults:{anchor:'99%'}, store:gridStore, cm: gridCm1, view:new Ext.grid.GridView(), sm:sm, tbar:[], viewConfig: { forceFit: true, refresh:true }, bbar:new Ext.PagingToolbar({ plugins: new Ext.ux.Andrie.pPageSize(), beforePageText: '第', afterPageText: '/ {0}页', pageSize: pageSize, store:gridStore, displayInfo:true, displayMsg:'共{2}条, 当前{0}-{1}条', emptyMsg:'没有数据', buttons:[ { text:'关闭',handler:function(){ newOrUpWin.hide();} } ], doLoad: function(start){ start_param = start; pageSize = this.pageSize; var o = {}; var pm = this.paramNames; o[pm.start] = start; o[pm.limit] = this.pageSize; this.store.reload({params : o}); } }) }); gridCm1.setConfig([ new Ext.grid.RowNumberer(), {header:"name1",width:100,sortable:true,dataIndex:'titleName'}, {header:"name2",width:100,sortable:true,dataIndex:'titleName1'}, {header:"name3",width:100,sortable:true,dataIndex:'titleName2'}, {header:"name4",width:100,sortable:true,dataIndex:'titleName3'}, {header:"name5",width:80,sortable:true,dataIndex:'titleName4'} ]); 设置好了后,用gridStore.load({params:{start:0,limit:pageSize}}); 这样后第一次加载数据就是没有显示,总记录有显示,要刷新一下才可以看到结果,怎么样了,有没有人遇到过同样的问题
求教,如何在GridPanel的行中生成一个ext的button
如何在GridPanel的每一行中生成ext的button,生成html的可以,ext的button如何做 var cm = new Ext.grid.ColumnModel([{ header : '', dataIndex : 'RN', width : 20, align:'left', renderer:createButton } ]); function createButton(){ return "<input type='button' value='测试'>" }
Ext.Grid 如何在一加载的时候就隐藏某些列
Ext.grid 有隐藏列的功能,但是如果我想在grid一加载的时候就隐藏某些列,怎么办呢?其实说回来也就是在grid加载时就调用其本身的隐藏列的Js代码,但是我实在是找不到。请各位高手相助。 背景:领导要求保持用户浏览习惯,就是上次他保留了哪几个列,下次登录时还是显示哪几个列,要是又想多看几个列了,再多放几个出来,那下次看到的就是增加后的列。就是通常所说的用户定制界面。我想通过在隐藏,显示列的Js中,把需要的列写入cookie,然后在加载的时候将cookie中的列通过js显示出来,把不需要的列隐藏掉。不知道我表达的够不够清楚。谢谢 [b]问题补充:[/b] 谢谢您的解答。但是还是有个问题,就是我在隐藏列的时候如何记录显示的列到cookie中呢,我对ext不是很熟悉,是不是要对gidpanel进行重写呢? Ext.override(Ext.grid.GridPanel, { showColumnGroup : function(columnPrefix) { this.switchColumnGroup(columnPrefix, false); }, hideColumnGroup : function(columnPrefix) { this.switchColumnGroup(columnPrefix, true); }, switchColumnGroup : function(columnPrefix, state) { var cm = this.colModel; cm.suspendEvents(); function doFilter(column, colIndex, allColumns) { if (column.id.substr(0,3) == columnPrefix) { cm.setHidden(colIndex, state); } } Ext.each(cm.config, doFilter, this); cm.resumeEvents(); this.getView().refresh(true); } }); 这是官方上讨论的有关隐藏显示列的一段js,看不太懂。 [b]问题补充:[/b] 非常感谢。我已经有思路。还有一个问题,就是grid的close事件。我这样写 grid.on("close",CloseWriteCookie,grid); function CloseWriteCookie() { //写cookie alert("您确定关闭窗口吗?"); } 不起作用,我是照着afteredit的方法写的,有什么问题吗?
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问