我在程序中有一个查询代码如下:在界面上我使用DBGRIDEH控件,这里的实现是在查询的结果上加上CHECKBOX,在这里当我点第一次查询的时候是正常的,当我第二次在点查询的时候发现数据无法显示出来.在这里我对DGBRIDEH上定义了几个字段分别为:CH,DAH,ID等可是第二次查询的时候只能看到CHECKBOX,不能看到CH,DAH,ID等字段的值.还请大侠们帮我看看,如何改进.如果没有定义字段则可以,定义字段就不行了.
procedure TCBSJCXfrm.btnQueryClick(Sender: TObject);
var
  vCondition,vSql : string;
  i : Integer ;
begin
  vCondition := 'Where 1=1';
  if edtCH.Text <> '' then
    vCondition := vCondition + ' And CH=''' + Trim(edtCH.Text) + '''';
  if edtYHDZ.Text <> '' then
    vCondition := vCondition + ' And YHDZ like ''%' + Trim(edtYHDZ.Text) + '%''';
  vSql := 'select DAH,CH,YHMC,YHDZ,KJ,BSH,ID from v_CBCX ' + vCondition;  F_ExecSql(ADOQuery1,vSql,'o');
  ClientDataSet1.Data := DataSetProvider1.Data;  with ClientDataSet1 do
  begin
    Close;
    Fields.Clear;
    FieldDefs.Clear;
    CommandText := vSql;
    FieldDefs.Update;
    with TFieldDef(FieldDefs.Insert(0)) do
    begin
      Name := 'Selected';
      DataType := ftBoolean;
      DisplayName := 'Selected';
    end;
    for i := 0 to FieldDefs.Count - 1 do
      FieldDefs[i].CreateField(ClientDataSet1);
    Fields[0].FieldKind := fkInternalCalc;
    Open;
  end;
end;procedure TCBSJCXfrm.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
  with ClientDataSet1 do 
  begin 
    if Fields[0].Value = Null then Fields[0].AsBoolean := False; 
  end;
end;