StringGrid的cell控制问题!好头疼!!!(100分)

  • 主题发起人 主题发起人 studying
  • 开始时间 开始时间
S

studying

Unregistered / Unconfirmed
GUEST, unregistred user!
用StringGrid作数据库输入界面,现在的问题是其中的cell 很难进行输入数据检查.
比如说cell[2,3]输入数字,cell[4,3]输入字符....如果输入非法的话,给出提示.
还有就是如何用键盘的上下左右四键控制cell的选择?
看了以前的帖子,好像都不适合,希望各位大虾出手相助!
 
试试这个免费有源码的advgrid,用过就不想用stringgrid了
http://www.tmssoftware.com/advgrid.htm
 
用过shlDataGrid连advgrid也不想用了。
 
barton:
shlDataGrid哪里可以下载?
 
一个简单的例子:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (stringgrid1.col=1) and (not (key in ['0'..'9',#13,#8])) then
begin
messagebox(handle,'只能输入数字','程序提示',MB_OK);
key:=#0;
end;
end;
//第二列只能输入数字。
 
EasyGrid !!!
 
编几个处理各种错误的子程序,在用循环调用各个子程序。
手头有一模块:我觉得这样挺方便的(Sgpo是一个stringgrid)
自己定义子程序:
{ Check date data valid }
function Tpurordermanafrmb.DateCheck(CellData: string; ACol,
ARow: integer): string;
begin
Result:='';
try
if CellData<>'' then strtodate(CellData)
except
Result:='第'+inttostr(ARow)+'行,第'+inttostr(ACol+1)+'列为无效时间';
end;
end;

{ Check float data valid }
function Tpurordermanafrmb.FloatCheck(CellData: string; ACol,
ARow: integer): string;
begin
Result:='';
try
if Trim(CellData)<>'' then strtofloat(CellData)
except
Result:='第'+inttostr(ARow)+'行,第'+inttostr(ACol+1)+'列为无效实数';
end;
end;
存档时调用:限制第2列为实数,第3列为时间:
var errorstring: string;
i: integer;
调用时
....
errorstring:='';
for i:=1 to SGPo.RowCount-1 do
ErrorString:=ErrorString+FloatCheck(SGPo.Cells[2,i],2,i)+
DateCheck(SGPo.Cells[3,i],3,i);
{ If Data is not valid , show error information }
if trim(ErrorString)<>'' then
ErrorString:='不能存档,因下列数据不合法:'+ErrorString;
........

哦,不好意思,错误理解你问题的意思了,既然写出来了就发上来吧,这是一个存档时检查
stringgrid的数据有效性的做法。
 
chenlh:
正好请教一下,我也用类似你所写的结构
try
if Trim(CellData)<>'' then strtofloat(CellData)
except
Result:='第'+inttostr(ARow)+'行,第'+inttostr(ACol+1)+'列为无效实数';

比如:(举一个简单例子 )
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:='qw3';
try
if s<>'' then strtofloat(s)
except
showmessage('无效实数');
end
end;
执行的时候,不出现消息框,出现错误"qw3不是合法的实数"
怎么回事呢?
 
shlDataGrid是我自己写的控件.还没有放在哪个站点.
1.支持跨行跨列;
2.可触发OnChange事件;
3.我修改的EReport可以直接将ShlDataGrid打印出来.

如果需要的话给一个mail.
 
to barton:
麻烦你给我一个,谢谢!
liuly@edu.21cn.com
 
to barton:
麻烦你给我一个,谢谢!
lin_ding@etang.com
 
to barton:
麻烦你给我一个,谢谢!
<A
href="mailto:gcqmail@sohu.com">gcqmail@sohu.com</A>

好象可以在ONGETEDITTEXT或SETEDITTEXT里判断数据的有效性,先记录当前的CELLS位置,
如果不合法,则仍然指定先前的CELLS!
限制输入可以在ONKEYPRESS和ONKEYUP里进行!判断ROW=?或COL=?
 
回studying:
你的调试环境的设置是让delphi处理异常。你可以改一下设置。
tools-->Debugger options -->language exceptions中的stop on delphi exception的
选项选为false

 
barton: don't forget me!
yue5460@elong.com
 
barton:给一个,给你加分决不食言!
chenzhaoxing@163.net
 
barton:给一个
cd.xujiang@263.net
 
用Cell组件!
 
cell组件? 我怎么没见过?
ht99大虾,请说得详细些好么?
 
寻求 OWC 的学习资料 我删除了,分还给你。
 
cell组件?
ask again!
 

Similar threads

D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
后退
顶部