如何实现grid禁止选择特定行

问题描述

用extjs写了个grid,并且有checkboxselectModel,在每一行里,有一列渲染是button。在点击button时,改变其中某一列的值,并使这一列无法被选择。找了cm和sm的方法,都没有相关方法。请问该如何实现呢?使用的extjs3.2版本。 问题补充:柴秉承 写道

解决方案

/*! * suziwen1@gmail.com * http://suziwen.com */Ext.onReady(function(){ Ext.QuickTips.init(); var xg = Ext.grid; // shared reader var reader = new Ext.data.ArrayReader({}, [ {name: 'company'}, {name: 'price', type: 'float'}, {name: 'change', type: 'float'}, {name: 'pctChange', type: 'float'}, {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}, {name: 'industry'}, {name: 'desc'} ]); //////////////////////////////////////////////////////////////////////////////////////// // Grid 2 //////////////////////////////////////////////////////////////////////////////////////// var sm = new xg.CheckboxSelectionModel({ listeners:{beforerowselect : function( _this , _rowIndex , _keepExisting , _record ) { //if()在这里加上业务逻辑,指定哪条数据不让选择中就返回FALSE if(_rowIndex == 4){ return false; }else{ return true; }} } }); var grid2 = new xg.GridPanel({ store: new Ext.data.Store({ reader: reader, data: xg.dummyData }), cm: new xg.ColumnModel({ defaults: { width: 120, sortable: true }, columns: [ sm, {id:'company',header: "Company", width: 200, dataIndex: 'company'}, {header: "Price", renderer: Ext.util.Format.usMoney, dataIndex: 'price'}, {header: "Change", dataIndex: 'change'}, {header: "% Change", dataIndex: 'pctChange'}, {header: "Last Updated", width: 135, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'} ] }), sm: sm, columnLines: true, width:600, height:300, frame:true, title:'Framed with Checkbox Selection and Horizontal Scrolling', iconCls:'icon-grid', renderTo: document.body,bbar:[{ text:'disable', handler:function(){ //这里的getCell里的4表示第4行,0表示第一列,到时根据你这个SM具体放在哪而定 var cell = grid2.getView().getCell(4, 0); var checker = Ext.fly(cell.firstChild.firstChild); checker.removeClass('x-grid3-row-checker'); checker.addClass('x-grid3-row-unselectable'); }},{ text:'enable', handler:function(){ var cell = grid2.getView().getCell(4, 0); var checker = Ext.fly(cell.firstChild.firstChild); checker.removeClass('x-grid3-row-unselectable'); checker.addClass('x-grid3-row-checker'); }}] });});// Array data for the gridsExt.grid.dummyData = [ ['3m Co',71.72,0.02,0.03,'9/1 12:00am', 'Manufacturing'], ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am', 'Manufacturing'], ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am', 'Manufacturing'], ['American Express Company',52.55,0.01,0.02,'9/1 12:00am', 'Finance'], ['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am', 'Services'], ['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am', 'Services'], ['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am', 'Manufacturing'], ['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am', 'Services'], ['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am', 'Finance'], ['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am', 'Manufacturing'], ['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am', 'Manufacturing'], ['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am', 'Manufacturing'], ['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am', 'Automotive'], ['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am', 'Computer'], ['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am', 'Manufacturing'], ['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am', 'Computer'], ['International Business Machines',81.41,0.44,0.54,'9/1 12:00am', 'Computer'], ['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am', 'Medical'], ['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am', 'Finance'], ['McDonald's Corporation',36.76,0.86,2.40,'9/1 12:00am', 'Food'], ['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am', 'Medical'], ['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am', 'Computer'], ['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am', 'Services', 'Medical'], ['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am', 'Food'], ['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am', 'Retail'], ['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am', 'Manufacturing'], ['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am', 'Computer'], ['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am', 'Services'], ['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am', 'Retail'], ['Walt Disney Company (The) (Holding Company)',29.89,0.24,0.81,'9/1 12:00am', 'Services']];// add in some dummy descriptionsfor(var i = 0; i < Ext.grid.dummyData.length; i++){ Ext.grid.dummyData[i].push('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed metus nibh, sodales a, porta at, vulputate eget, dui. Pellentesque ut nisl. Maecenas tortor turpis, interdum non, sodales non, iaculis ac, lacus. Vestibulum auctor, tortor quis iaculis malesuada, libero lectus bibendum purus, sit amet tincidunt quam turpis vel lacus. In pellentesque nisl non sem. Suspendisse nunc sem, pretium eget, cursus a, fringilla vel, urna.<br/><br/>Aliquam commodo ullamcorper erat. Nullam vel justo in neque porttitor laoreet. Aenean lacus dui, consequat eu, adipiscing eget, nonummy non, nisi. Morbi nunc est, dignissim non, ornare sed, luctus eu, massa. Vivamus eget quam. Vivamus tincidunt diam nec urna. Curabitur velit.');}
解决方案二:
sm添加事件 listeners:{ beforerowselect : ( SelectionModel this , Number rowIndex , Boolean keepExisting , Record record ) if(button被单击过){ return false; }else{ return true; } }}
解决方案三:
beforerowselect : ( SelectionModel this , Number rowIndex , Boolean keepExisting , Record record ) 在选中一行数据之前触发,返回false取消选中 在选中一行数据之前触发,返回false取消选中 监听器将会被以如下的参数格式调用: this : SelectionModel rowIndex : Number 将要被选择的序号 keepExisting : Boolean False if other selections will be cleared record : Record 将要被选择的记录 为sm添加事件 跟据你的逻辑 来决定是返回true还是false
解决方案四:
点击BUTTON后,表格要刷新吗?还是你自己改变STORE里的值?
解决方案五:
你的要求grid特定行不被选择是可以实现的 但是你的需求我有点不大理解 你的意思是这样吗 正常情况下可以选择行 但是当单击button后 这个行就不可以再被选择了 还是单击button的时候 行没有被选择

时间: 2024-09-11 21:23:03

如何实现grid禁止选择特定行的相关文章

控件-delphi grid ,怎么实行行前面带选择框,行可以自由拖动进行排序?

问题描述 delphi grid ,怎么实行行前面带选择框,行可以自由拖动进行排序? 实现类似的效果,这是什么控件实现的? 解决方案 一.关于行选择框 建议在行的表格单元上,镶一个TCombobox,也可以选择,比较简单.像你说的选择框,比较复杂一点,须要镶一个容器(容器放选择框). 二.关于行可以自由排序 我的办法,在数据表中加入"排序"字段,在界面 加入两按键(上.下 ),点击按钮,是可以让单行上下移动,实现自由排序. 如果要拖拉排序,也是可以的,但代码量多比较复杂. 解决方案二:

如何禁止选择Calendar控件中已经过去的时间?

问题描述 如何禁止选择Calendar控件中已经过去的时间? 本人在做毕业设计售票系统,用的是C#+.NET 双击控件后台会出现代码如下: protected void Calendar1_SelectionChanged(object sender, EventArgs e) { } 在百度上复制代码如下: protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { if (e.Day.Date < Dat

深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制_javascript技巧

我记得在刚开始接触动态HTML及JavaScript时就接触过关于鼠标右键屏蔽的脚本代码,当时这些代码很多会用在防止浏览者未经允许的复制网页上的文字或者其他内容,后来的实际应用证明这种做法是不符合用户体验的,而且破解的方法也有很多,比如我曾经写过一篇文章讲解如何解除网页禁止复制的办法. 由此可见,限制右键及复制是不明智的做法,但是今天我仍然要谈谈关于禁止网页复制.右键菜单的事儿,因为随着网页APP技术的发展,网页应用和桌面应用之间的界限越来越模糊,有一些桌面程序实际上是由网页配合JavaScri

c++-用C++读取文件中特定行的某几列数据并输出到另一个文件

问题描述 用C++读取文件中特定行的某几列数据并输出到另一个文件 AR ZIMM 2014 06 30 00 00 0.000000 2 2.175456910513e-08 1.929140019560e-11AR ZWE2 2014 06 30 00 00 0.000000 2 -6.930289135325e-03 2.317673679230e-11AS G01 2014 06 30 00 00 0.000000 2 1.652894267903e-05 1.737915981300e-

一种基于记录集查找特定行的方法

记录集 问:我的一个表中包含了名为IdValue的单列主键.对于给定的IdValue值,我希望找到紧邻目标值之前和之后的表行(假定结果按IdValue排序).怎样才能不使用游标而通过一个基于集合的方法得到需要的结果? 答:Transact-SQL是一个基于集合的语言,使用它在结果集中定位特定的行并非一件易事.但是,服务器端ANSI Transact-SQL游标的性能远远不如基于集合的解决方案,因此,学习解决问题的多种技术非常重要,尤其在面临上述问题时. 以Northwind数据库中的Orders

.net datagrid 选择多行

datagrid 功能:点击datagrid并且按住键盘上的ctrl或shift可选择多行 Public Class MyDataGridCLASS Inherits DataGrid Private m As New ArrayList Public ReadOnly Property MultiSelectedIndex() As Integer() Get Return m.ToArray(GetType(Integer)) End Get End Property Protected O

C语言实现修改文本文件中的特定行

最近由于项目需要实现修改文件的功能,所以,博主认真查阅了一些资料,但是,很遗憾,并没有太多的 收获. 好的,首先我先叙述下功能要求: 其实很简单,就是Shell中sed命令的C语言实现,实 现定位到所需要的字段的那一行,之后修改成需要的内容.但是由于C语言是面向过程的语言,需要顺序执行 的特点,所以,实现中遇到了很多麻烦,在这里博主将实现的过程描述如下,以便大家参考. 问题描 述: 文本内容: wireless.1.authmode=1 wireless.1.compression=0 wire

T-SQL 随机返回特定行数据和分页查询

T-SQL 语言相较于标准SQL添加了很多特性,为了提高SQL Server的表现,是有必要深入了解的,面试时一般也会包 含这两个小问题. 首先,是在一个AdventureWorks中Person.Address中随机返回5行信息,可以如下写: SELECT TOP 5 * FROM ( SELECT *,NEWID() as RandomID FROM Person.Address ) t ORDER BY t.RandomID 关键在于调用了内置函数NEWID()生成的随机数,并排序,取前5

利用JavaScript选择GridView行

本篇技巧和诀窍记录的是:利用JavaScript选择GridView行. 下面我们利用JavaScript完成这一功能. 我们可以通过调用JavaScirpt函数改变单击的行的背景颜色来模拟选择的行 ,这里需要声明一个隐藏字段,从JS中获得选取GridView行的ID.在选择/删除 事件中,可以从隐藏字段中得到选择行的ID,完成一些需要功能. 第一步:在页面中添加GridView控件和一个按钮,隐藏字段 <input id="hdnEmailID" type="hidd