在dbgrideh 第一列加入checkbox,但checkbox总是不能选择! ( 积分: 100 )

  • 主题发起人 主题发起人 delphi3722
  • 开始时间 开始时间
D

delphi3722

Unregistered / Unconfirmed
GUEST, unregistred user!
在dbgrideh 第一列加入checkbox,但checkbox总是不能选择!
ADOQuery1 locktype 为ltBatchOptimistic
SQL为 'select 0 as checkitem from table '
Gitem := DBGridEh1.Columns.Add;
Gitem.FieldName := 'checkitem';
Gitem.Title.Caption := '选择';
Gitem.Checkboxes:=true;
Gitem.ReadOnly:=false;
Gitem.KeyList.Add('0');
Gitem.KeyList.Add('1');
Gitem.Title.TitleButton := true;
Gitem.Title.Alignment := taCenter;
Gitem.Alignment := taLeftJustify;
Gitem.Width := 30;
 
ADOQuery 不行 ClientDataSet 可以
 
checkbox的字段应该是真实字段
 
你看看是不是設置為只讀的了。
 
是啊ADOQuery1 open前 fieldbyname ('checkitem').asstring 设置 readonly=false
能选但不知为什么.一离开 dbgrideh 就把他还原为原来的值!!
 
数据库里必要要有对应的字段
 
这样select出来的是不能改的,要用ClientDataSet。
在ClientDataSet里加一个boolean字段,dbgrideh 连到ClientDataSet就可以了。
 
有更好的方法吗?
 
要对应字段,ADO的你要用批量处理的方式,DataSet可以。
但都必须有对应的字段,哪怕是虚拟字段都行。
 
来自:fsse4000, 时间:2007-12-6 20:16:43, ID:3857512
要对应字段,ADO的你要用批量处理的方式,DataSet可以。
但都必须有对应的字段,哪怕是虚拟字段都行。

虚拟字段我试了也是一样的,能选但会自动恢复为原来的值!
 
这个要在后台增加一个bit类型的字段,如TADOQuery 里加"Select ifTrue from TmpTable where 1=1"然后把字段加到DBgrid里,编绎后自然就是一个CheckBox的样,并可以选择或否!
 
只是选择啊,实际应用不能加多一个字段!
 
用计算字段,在ADOQuery里添加一个计算字段:Fc,类型为boolean,字段类型为Calculated
F1 string
查询语句:select 1 from a;
procedure Tcheck_frm.ADOQuery1CalcFields(DataSet: TDataSet);
begin
if DataSet.FieldByName('F1').asstring='1' then
DataSet.FieldByName('Fc').AsBoolean:=true
else
DataSet.FieldByName('Fc').AsBoolean:=false;
DataSet.FieldByName('Fn').AsInteger:=ADOQuery2.RecNo;
end;
procedure Tcheck_frm.DBGridEh2CellClick(Column: TColumnEh);
begin
if Column.FieldName='Fc' then
if ADOQuery1.FieldByName('F1').AsString = '1' then
begin
ADoQuery1.Edit;
ADoQuery1.FieldByName('F1').AsString := '0';
ADoQuery1.Post;
end else
begin
ADoQuery1.Edit;
ADoQuery1.FieldByName('F1').AsString := '1';
ADoQuery1.Post;
end;
end;
 
对,加计算字段也可以,今天的工作刚好做了这样一个列子!上面的兄弟就OK了
 
楼上的方法可以的.你再试试.
 
后退
顶部