A. cxgrid 满足条件的行的背景色问题
定义:
ARedStyle: TcxStyle;
AGreenStyle: TcxStyle;
AOriangeStyle: TcxStyle;
ABlueStyle:TcxStyle;
AYellowStyle :TcxStyle ;
AStyleCancel:TcxStyle;
AGrayStyle :TcxStyle ;
创建:
ARedStyle := TcxStyle.Create(Self);
ARedStyle.Color := $00FFDCFF;
ARedStyle.TextColor := clBlack ;
其他自己写吧。
是你的维修时间
这一列的名称,看样子是integer类型,我下面这个例子是字符串,你自己根据你的情况修改;
下面的代码写在TcxGridTableView的OnGetContentStyle里面即可。
if not VarIsNull(ARecord.Values[.Index]) then
begin
if ARecord.Values[.Index] = 'N' then
begin
AStyle := ARedStyle ;
end;
end;
这么难的问题,你才出了5分
B. delphi中cxgrid cheackbox 多选
在 Properties 的 OnEditValueChanged 事件写代码:
将当前行的主键值记录下来
Qry过滤,Filter := 'Check字段 =True'
将过滤出来的记录Check字段 全部修改为 False
根据第1步记录的主键值,定位回修改的那行,并将其Check字段 修改为 True
大致代码如下
var
tmpKey:string;
begin
ifnotqry.FieldByName('Check字段').AsBooleanthen
Exit;
tmpKey:=qry.FieldByName('key字段').AsString;
qry.DisableControls;
try
qry.Filtered:=False;
qry.Filter:='Check字段=True';
qry.Filtered:=True;
whilenotqry.IsEmptythen
begin
qry.Edit;
qry.FieldByName('Check字段').Value:=False;
qry.Post;
end;
qry.Locate('key字段',tmpKey,[]);
qry.Edit;
qry.FieldByName('Check字段').Value:=True;
qry.Post;
finally
qry.EnableControls;
end;
end;
C. cxGrid cxGridTableview 不用数据源 怎么插入从表数据
不用理grid,直接操作dataset
如果你知道是哪个dataset比如adoquery1
直接
close;
sql.text:='xxxxx';
open;
就完了
如果dataset可能会变化,想写通用的
cxgrid有个child叫TableView(这个东西分好几种,具体看设置)这个是显示数据用的,IDE左边显示组件的treeview里能看到,或者在cxgrid右下角有带下划线的tableview名字可以选择
类似cxGrid1DBTableView1这样
它有个属性是 DataController,它有子属性DataSource,到这里就认识了吧
跟操作其他dataset一样
举个例子:
cxGrid1有个cxGrid1DBTableView1
那就可以直接写
cxGrid1DBTableView1.DataController.DataSource.Dataset.close;
D. DELPHI中的cxgrid,如何用代码实现表格内容居中显示,注意不是表头是内容
1. 如果此控件支持Cell的自绘的话,可以自行在指定的Rect 中绘制---此方法最底层了
2. 通地更改数据的方法实现对齐,即给数据左侧补空格
DataSet的Field.GetText 事件中
(Sender: TField; var Text: String; DisplayText: Boolean);
Text := StringOfChar(#$20,(ColWidth - Length(Text)) div 2) + Text;
ColWidth 为你Grid设计好的显示宽度,简单点可以写死 灵活点从Grid中读取吧
E. cxgrid 是否能做到在结果中过滤,如何做
ado 中recordset可以过滤
F. 怎样使大量数据在Grid控件中显示时,不占用太多时间
我一个access数据库,1万多条记录,查询时ADOQuery后的数据通过DataSource控件全部显示在DevExpress 的 cxGrid控件中,每次查询需要耗时5秒钟才能响应用户操作。 请问能否提供方法使Grid快速相应?就像access中或SQL SERVER中打开大量数据的表时,显示完部分数据后,其它数据后台更新,快速响应操作你把数据分页显示,速度就上去了。。。对,我就是想要这样,但如何分页显示呢?关注这个帖子帮你顶下~ 我也想知道cxGrid我没用过,不过我用DBGrid显示Access数据库中一个四万多条记录的表,也就两三秒而已。能说说怎样处理的吗?最好还是优化一下数据(查询语句)。。对於不需显示的橍位尽量不要, 其实不管怎么好的数据网格控件。。在数据量很大的时候。。都会有相对慢的问题。。因为显示屏的大小是有限的,所以每屏显示个30条记录就差不多了。 程序中处理上一页、和下一页。程序中能让用户设置每屏显示的记录数。必须自己写程序控制每页的显示数量吗?数据网格控件自己不带有以上功能吗? 就像SQL SERVER或ACCESS那样,有大量数据时,首先先是一页,接着就能响应用户操作,同时后台继续在数据网格控件中添加其他没有显示的数据请帮忙大家都不清楚吗关一下 。。。大家给个面子好不好求助dbGrid 跟StringGrid (你的cxGrid应该是StringGrid)有本质的区别, dbGrid仅仅需要显示的就是行数区域的,也可以说dbGrid有分页的作用。 stringGrid没有, 你可以 load 时候 用Application.processmessage我用的DevExpress的Grid控件,他本身是数据感知的,通过DataSource控件获得数据集,但我没有找到他的分页功能呢? 请帮忙cxGrid我没用过,不过我用DBGrid显示Access数据库中一个9万多条记录的表,也就两三秒而已。 CPU: P-M1.4 内存:256M 硬盘还是4200转的我也是笔记本,咱们差不多,关键是不仅仅查询,而且还经过一些SQL运算,所以耽误时间了,我看主要是数据表格控件的速度不够,不加数据表格,单独查询,很快就完成了关注一下 对于用户选择商品信息的情况,大家是怎么处理的?商品信息表大概有几万条记录。cxGrid本身还对数据记录进行转换处理的,它有自己的数据记录格式,所以速度上有所损失。 不可否认,cxGrid的功能是强大的,其查询、过滤、分组等功能能让你不用写一行代码。 SQL Server的企业管理器以及DB2的iSeries等类似客户端在每次查询时并不接收所有的返回记录,它们在接收一定数目的记录后就暂停接收,在客户需要时再进行接收剩余的部分记录。这是客户端做到的。楼主是不是搞错了? 参考DBGrids.pas源码(TCustomDBGrid.DrawCell),DBGrid显示数据是显示多少行就读多少行的数据,不是将整个数据集读进内存,所以即使有一亿条数据,它也不会花什么时间来显示,花时间的是连接数据库的数据集部件和数据库程序,DBGrid也不保存不显示的数据。 StringGrid跟DBGrid有明显区别,DBGrid的数据源来自数据集,StringGrid的数据源来自内存,所以StringGrid显示之前要将数据放入内存,楼主的想法只有对StringGrid才有意义,不过也不用在后台取数,只要监视StringGrid的TopLeftRow,仿效DBGrid读入当前一页的数据即可。 至于cxGrid等表格不是显示慢,而是因为要完成各种功能,势必要历遍整个数据库一次甚至多次,所以比较慢,没有好办法。 因为cxGrid在读入数据后要对所有字段和所有纪录进行一次映射,慢是无可避免的了。如果表格中有Lookup字段就更是慢上加慢没办法了吗?只能换DBGrid控件了吗?dbgrideh也不错郁闷,难道要更换数据表格控件?系统已经完成了,使用维护中才发现大量数据显示慢的问题,要全部更换控件可不是一件简单事啊为了用户的利益,换控件吧明天结帖,看看还有没有一线生机没有希望了吗?放弃cxgrid的一些功能可以加快速度,我不会随便用cxgrid,因为dxgrid升级成cxgrid之后,之前写的程序就报废了,万一以后来了exgrid,fxgrid怎么办,此其一,cxgrid很多花俏的东西,你搞编程的会用,但连电脑也不怎么懂的用户会用吗?有些功能有用吗?别说在中国,我想老外也不一定使用,此其二,cxgrid很多鼠标操作的功能,作为屏幕展示确实很吸引人,但是真正处理事务,这些功能除了花时间没有什么意义,此其三,cxgrid控件很特别,不与其它兼容,连自己的dxgrid也不兼容,很容易被吊死在这棵树上,要换控件几乎要重写整个程序,思路都要变了,此其四,所以没有什么特殊用途,任它的功能再强大,也得慎重考虑,避免后悔。是啊,cxGrid确实不少弊端,换数据表格控件不是不行,但有原因:系统已经完成,使用了很长时间了,更改控件可能引入Bug,此其一;数据表格中许多要用到主从,甚至三层关系,不用cxGrid也要使用别的第三方控件,一样存在兼容性问题,此其二;三、我比较信任DevExpress的研发能力,认为一定有解决方法,此其三;我也不想就这样放弃,还在尝试别的方法,此其四。 嘿嘿,效仿楼上,勿怪。 也许多线程可以,我晚上试试,看SQL SERVER和ACCESS显示数据记录时,感觉是用了多线程的样子……楼主,泼泼冷水,一旦在数据库使用多线程,你将会遇到前所未有的困难------数据集控件的线程安全问题,举个例子,有多个线程同时使用一套数据控件 a:=DataSet.FieldByName( *** ).AsString. b:=DataSet.FieldByName( *** ).AsString. 连续执行这两句,b有时等于a,有时又不相等,还会读数出错,甚至报告致命错误,把程序当掉,因为数据控件已经被其它线程修改,或者删除,或者两个线程同时读数,使用Synchronize,可以解决问题,但这就是变相回到单线程,甚至比单线程执行还慢,结果从这个井出来,又落入另一个井,并且越跌越深,经验之谈,信不信你可以试试。最简单的方法就是减少每次读取的数据了,好像一下子读入几万笔数据没有太大必要。1: .DisableControls 2:go 3: .EnableControls今天没时间了,琐碎的事太多,没办法静下心来写代码,感谢 kinneng 老兄的不吝指教,用天下无贼里的那就话: “我想试试”。拖一天再结帖吧确实没有找到好的解决办法,看来在以后的程序中只能分页显示了。
G. delphi 对CXGrid的行操作
提供 DevExpress 官网对此问题提供的示例代码:
//DISABLEAROW禁止某行编辑
procereTForm1.cxGrid1DBTableView1Editing(Sender:TcxCustomGridTableView;
AItem:TcxCustomGridTableItem;varAAllow:Boolean);
var
AKeyValue:Variant;
begin
AKeyValue:=Sender.DataController.GetRecordId(Sender.Controller.FocusedRecordIndex);
if(AKeyValue='1351')or(AKeyValue='1356')or(AKeyValue='1384')then
AAllow:=False;
end;
//MAKINGAROWREADONLY设置某行为只读
procereTForm1.cxGrid1DBTableView1InitEdit(
Sender:TcxCustomGridTableView;AItem:TcxCustomGridTableItem;
AEdit:TcxCustomEdit);
var
AKeyValue:Variant;
begin
{AKeyValue:=Sender.DataController.GetRecordId(Sender.Controller.FocusedRecordIndex);
if(AKeyValue='1351')or(AKeyValue='1356')or(AKeyValue='1384')then
AEdit.ActiveProperties.ReadOnly:=True;}
end;
//MAKINGAROWLOOKLIKEDISABLED使某行为呈现为锁定状态
procereTForm1.(
Sender:TcxCustomGridTableView;ARecord:TcxCustomGridRecord;
AItem:TcxCustomGridTableItem;outAStyle:TcxStyle);
var
AKeyValue:Variant;
begin
AKeyValue:=Sender.DataController.GetRecordId(ARecord.RecordIndex);
if(AKeyValue='1351')or(AKeyValue='1356')or(AKeyValue='1384')then
AStyle:=cxDisableStyle;
end;
H. 求delphi 高手救命...cxgrid 问题
上面带的那些按键,其实用起来有点死板,把它删除掉,自己在上面放几个按键替换它,然后自己写代码控制它,这样不仅可以解决你的问题,而且还可以避免提交了不合法的数据,影响程序安全。
I. 怎么让jqgrid搜索忽略大小写
<pre t="code" l="java">jQuery("#grid_id").navButtonAdd('#pager',{
caption:"Excel",
buttonicon:"ui-icon-excel",
onClickButton: function(){
alert("导出excel");
},
position:"last"
});
J. Delphi cxGrid表对行的操作
通过tableview的onEditing事件控制编辑状态,可以根据你的条件,符合条件的设置为:AAllow := False; 即可。
如果需要条件,代码和如下类似:
if (TableView.Controller.FocusedRecord.Values[需要判断的列] = 值) and (AItem.Index= 第几列) then
AAllow := False
else
AAllow := True;