问一个关于checkbox的问题(50分)

  • 主题发起人 主题发起人 xuzhic2001
  • 开始时间 开始时间
X

xuzhic2001

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据表里面有一个字段类型为bit,我在dbgrideh里面给该字段设置为checkbox的显示形式,当一条记录的该字段的checkbox选中时,在该字段的update事件里该字段对应的数据表值改为1,没有选中的时候改为0
程序如下
procedure TFrmain.DBGrideh1Columns18UpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var str:string;
begin
IF dbgrideh1.Columns[0].Checkboxes=true then
str:=inttostr(1)
else
str:=inttostr(0);
with queryall do
begin
close;
sql.Clear;
sql.Add('update 素材参数 set 显示='''+str+''' where 素材名称id='''+querycs.fieldbyname('素材名称ID').AsString+'''');
execsql;
end;
end;
可现在出现了问题,当checkbox已经选中的时候,点击checkbox想把勾给去掉,可是这是执行的还是str:=inttostr(1)语句,也就是说这个DBGrideh1Columns18UpdateData过程发生在checkbox内容改变以前,不知道这个问题应该怎么解决
 
if dbgrideh1.Columns[0].Checkboxes then
str := '0'
else
str := '1';

另外您不觉得启动程序的时候 checkbox 应该有个初始化过程么?
 
checkbox 怎么初始化,我想通过checkbox把数据表里面底值体现出来,如果数据表里面底值为1,则checkbox选中,为零不选中,反之也一样,现在底问题是怎么实现,当checkbox选中的时候post的时候数据表里面的值更新为1
 
不是给你写了么,当没看见?
 
to vvyang:你的
if dbgrideh1.Columns[0].Checkboxes then
str := '0'
else
str := '1';
和我的程序有什么区别吗?只不过是写法不一样罢了,行不通,不过问题现在已经解决,用的是另外的方法。
 
To xuzhic2001:
是啊,程序不同也就“写法不一样”这点区别!
如果“DBGrideh1Columns18UpdateData过程发生在checkbox内容改变以前”,那就应该判断点击之前的状态,你原来写的是判断点击之后的状态,就这区别!!
if dbgrideh1.Columns[0].Checkboxes then
str := '1'
else
str := '0';

if dbgrideh1.Columns[0].Checkboxes then
str := '0'
else
str := '1';
有什么区别,你连这都看不明白??
 
默认的都是选中的状态
 
接受答案了.
 

Similar threads

D
回复
0
查看
855
DelphiTeacher的专栏
D
D
回复
0
查看
865
DelphiTeacher的专栏
D
D
回复
0
查看
692
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部