DELPHI中复选下拉框动态填充(TCheckComboBox)
复选下拉框(TCheckComboBox)的动态填充,即不通过字典实现
具体实现:
DoInIt调用方法:
DEMANDNAMESet(qcDEMAND_NAME.FirstEdit.Properties.Items);
DEMANDNAMESet方法:
procedure TfrmCgClientDemandQry.DEMANDNAMESet(const AList: TcxCheckComboBoxItems);
var
AData:TClientSimpleDataEntity;
AInParams,AOutParams : TParams;
begin
AData := TLib.CreateDataEntity;
try
AList.Clear;
AData.Close;
AData.CommandText :='SELECT DEMAND_NAME FROM TB_CG_DEMAND GROUP BY DEMAND_NAME' ;
AData.Open;
while not AData.Eof do
begin
AList.AddCheckItem(AData.FieldByName('DEMAND_NAME').AsString);
AData.Next;
end;
finally
AData.Free;
end;
end;
DoQuery方法: (箭头内为有效代码)此处使用sql字符串拼接。可以用其他方法例如Sql中写 (:字段) 然后Entity.Params.ParamByName(字段).AsString := 值
procedure TfrmCgClientDemandQry.DoQuery;
var
sSql,DEName: String;
begin
inherited;
//⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
DEName :=qcDEMAND_NAME.FirstEdit.Text;
DEName := StringReplace (DEName, ';', ''',''', [rfReplaceAll]) ;
// ShowMessage(DEName);
//⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆
sSql :=
' SELECT ROWNUM, B.* ' +#13+
' FROM (SELECT A.DEMAND_NAME, ' +#13+
' LISTAGG(DEMAND_ID, '','') WITHIN GROUP(ORDER BY A.DEMAND_NAME) IDS, ' +#13+
' SUM(A.DEMAND_NUMBER) TOTAL ' +#13+
' FROM TB_CG_DEMAND A ' +#13+
' WHERE 1=1 ';
//⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
if qcDEMAND_NAME.WhereSQL <> ''then
sSql :=sSql+' AND DEMAND_NAME IN (''' + DEName +''')';
//⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆
if qcEXPECT_TIME.WhereSQL <> ''then
sSql :=sSql+' AND ' + qcEXPECT_TIME.WhereSQL;
sSql :=sSql + ' GROUP BY A.DEMAND_NAME) B ';
DataEntity.Close;
DataEntity.CommandText :=sSql;
DataEntity.Open;
end;