//查询数据并显示 procedure TDetailAccountBitBtnClick(Sender: TObject); begin adoqueryClose; adoquerySQLClear; adoquerySQLAdd(select a*b科目名称 from 本期明细帐簿 a科目表 b where (a科目代码 like %+editText+%)and); adoquerySQLAdd((a科目代码=b科目代码)); adoqueryOpen; //清除设置的数据过滤器并重新设置列表 datasourceDataSetFiltered:=false; setlist(); end; //窗体显示时向左边列表框中添加科目名称 procedure TDetailAccountFormShow(Sender: TObject); begin setlist(); end; //将数据集中已有的科目名称添加到列表中 procedure TDetailAccountsetlist; var name:string; begin listboxClear; listboxClear; while not adoqueryEof do begin name:=adoqueryfieldbyname(科目名称)AsString; //如果列表中没有该名称则添加若已有则不做任何动作 if listboxItemsIndexOf(name)= then listboxItemsInsert(listboxItemsCountname); adoqueryNext; end; end; //选中一个科目名称并允许将其添加到右边的列表中 procedure TDetailAccountListBoxClick(Sender: TObject); begin if listboxItemsCount<> then buttonEnabled:=true; end; //选中一个科目名称并允许从右边的列表中删除它 procedure TDetailAccountListBoxClick(Sender: TObject); begin if listboxItemsCount<> then buttonEnabled:=true; end; //在右边的列表中添加某一项 procedure TDetailAccountButtonClick(Sender: TObject); var name:string; begin name:=listboxItemsStrings[listboxItemIndex]; //若右边的列表框不存在该项再向其中添加 if listboxItemsIndexOf(name)= then listboxItemsInsert(listboxItemsCountname); //允许在表中根据选择的项进行显示 bitbtnEnabled:=true; end; //在右边的列表中删除某一项 procedure TDetailAccountButtonClick(Sender: TObject); begin //若不为空则可以将名称项从列表中删除 if listboxItemsCount<> then listboxItemsDelete(listboxItemIndex); //若右边列表已空则将按钮变灰(不可用) if listboxItemsCount= then begin buttonEnabled:=false; bitbtnEnabled:=false; end; end; //根据选择的项显示数据 procedure TDetailAccountBitBtnClick(Sender: TObject); var filstr:string; i:integer; begin filstr:=; //根据列表中内容设置数据集的过滤项并过滤 for i:= to listboxCount do begin filstr:=filstr+科目名称=+listboxItemsStrings[i]+; if i<>listboxCount then filstr:=filstr+ OR ; end; datasourceDataSetFilter:=filstr; datasourceDataSetFiltered:=true; end; [] [] |