各位帮帮忙!DBGrid怎样使用!难!难!难!难!难! (50分)

  • 主题发起人 主题发起人 hzqlli
  • 开始时间 开始时间
H

hzqlli

Unregistered / Unconfirmed
GUEST, unregistred user!
DBGrid中怎样实现控制某一个数据的输入:
如:一个DBGrid得某一列中的某一行(即某一个REAL型数据),如果此数据有一个“-”或“.”
(即负号或小数点)则当第二次输入时就不能输入,而没有时可以输入。而且负号只能在第一位输入。
 
这是数据库的安全约束,real型当然最多只能有一个‘-’和‘.’,如果你想有多个
,把它设置为字符型!
 
1.用 Pos 检测'-'的位置和个数
2.计算 '.'的个数
3.selstart 判断光标当前所在位置
 
如果你想在Grid作可以设定mark
 
关键是我得不到当前数据的数值!
 
我也遇到同样的问题,看下面代码:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
// TDBGrid(Sender).SelectedField.AsFloat;

if TDBGrid(Sender).SelectedField.IsValidChar(Key) then
begin
TDBGrid(Sender).SelectedField.CurValue;
end
else
ShowMessage('fff');
end;
TDBGrid(Sender).SelectedField.CurValue 获得的是field中的值,并不是录入的值,
如果能获得录入值,就可以控制录入内容(包括‘-’号)!!!
 
现在问题的关键就是我无法的到录入值,TDBGrid(Sender).SelectedField.CurValue 获得的是
数据库中的数值,当改变后它不变!加入我得到录入值问题就解决了!
 
谁回答的我满意在加50分,大侠们帮帮忙吧!
 
在DataSet的字段的OnSetText事件里可以得到录入的值,就是Text
你可以在这里判断输入是否合法,如果合法就:
Sender.AsString := Text;
 
来点代码好不好!我没有用过不知怎么写代码!谢谢!
 
//Area为数值字段
procedure TForm1.Table1AreaSetText(Sender: TField; const Text: string);
begin
try
StrToFloat(Text);
Sender.AsString :=Text ;
except
Application.MessageBox('输入错误!', '提示', MB_OK + 64);
Exit;
end;
end;
 
请问大侠能否在数据提交以前得到录入的值。请你多费点心帮帮忙!我在线等待!
 
建议使用dxdbgrid控件,该控件中有一个edittext属性,可以直接得到数据提交前录入的数据。
 
在DataSet的字段的OnSetText事件里判断输入是否合法:
var count,count1;
procedure(......)
count:=0;
count1:=0;
for i:=0 to length(str)-1 do
if pos(str,i,1)='-' then count=count+1;
if pos(str,i,1)='.' then count1=count1+1;
if (count1>2) or (count>2) then
Application.MessageBox('输入错误!', '提示', MB_OK + 64);
else
......


Sender.AsString := Text;


 
oK!!!!!!!!!!!!1
 
后退
顶部