我在程序中有一个查询代码如下:在界面上我使用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;
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货