在lookupcombobox 能不能实施模糊查询啊。80分求助 急!!

HelpMeNow 2009-07-21 12:07:38
有没有一种LookUpCombobox 能实现下拉时,对数据源的记录进行模糊查询的呢。

比如
中国人
西班牙人
美国人,


录入一个“国”字,快速搜索出

中国人
美国人
...全文
464 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
落叶随风飘 2012-08-04
  • 打赏
  • 举报
回复
以上不是很好,我有很好的过虑,在此无私奉献


多列下拉框 控件使用 DevExpress cxLookupComboBox1
多列下拉框, 制作"进销存商店系统"必备.

cxLookupComboBox1,很好的控件,网上找到例子太少了,在此无私奉献
cxLookupComboBox1,是DevExpressVCL 傻瓜安装20070113.exe,其中一个控件


cxLookupComboBox1.Properties.ListSource//数据源
cxLookupComboBox1.Properties.ListFieldNames//数据源中某字段名称
cxLookupComboBox1.Properties.KeyFieldNames//数据源中某字段名称对应的ID号
cxLookupComboBox1.EditValue//读出当前选的内容的ID号
cxLookupComboBox1.EditText//当前选择的内容

1,把以上设置好

procedure TForm1.cxLookupComboBox1PropertiesChange(Sender: TObject);
begin
if trim(cxLookupComboBox1.EditText)='' then exit;
//输入空,退出更新列表
if cxLookupComboBox1.Properties.ListField.AsString=cxLookupComboBox1.EditText then exit;
//输入和选择列表相同,退出更新列表
ADOTable1.Filtered:=false;
ADOTable1.Filter:='name like ''%'+cxLookupComboBox1.EditText+'%''';
ADOTable1.Filtered:=True;
//更新列表,近似查询
cxLookupComboBox1.DroppedDown:=false;
cxLookupComboBox1.DroppedDown:=true;
//重新刷新列表
// Memo1.Lines.Add(cxLookupComboBox1.Properties.ListField.AsString ); 不用
// Memo1.Lines.Add(cxLookupComboBox1.EditText+', ');不用

end;

2,上面就是做条件过虑.

3,incrementalfiltering,=false,设置成false,不过虑就行,要选择不了.

我的QQ59o935o
lengchen1217 2011-08-05
  • 打赏
  • 举报
回复
有答案了,
把IncrementalFiltering这个属性设置成false
然后在cxLookupComboBox1PropertiesChange写代码

procedure TForm1.cxLookupComboBox1PropertiesChange(Sender: TObject);
var
CmdStr: string;
begin
CmdStr:= 'select * from Dh where 1=1 and Dh like ''%'+cxLookupComboBox1.Text+'%''';
ADOQuery1.Close;
ADOQuery1.SQL.Text:= CmdStr;
ADOQuery1.Open;
end;
lengchen1217 2011-08-05
  • 打赏
  • 举报
回复
同求啊,实现不能,哪位大大帮帮忙
luckyboy97 2009-07-22
  • 打赏
  • 举报
回复
我用的就是TcxLookupComboBox,这个的索引是从第一个字开始的字符,如果你要用中间字符的话,可以自己用COMBOBOX控件动态加载数据项,select * from where NAME LIKE ''%'+条件+'%''
这样来实现,我用的更多的是采用拼音索引来实现
HelpMeNow 2009-07-22
  • 打赏
  • 举报
回复
顶一下。
luckyboy97 2009-07-21
  • 打赏
  • 举报
回复
procedure TFrm_VendorCodeYEBFind.SetLookCmb_Subject;
begin
LookCmb_SSub.Properties.ListSource:=DM.Ds_Subject;

LookCmb_SSub.Properties.ListFieldNames:='科目编码;科目名称';
LookCmb_SSub.Properties.KeyFieldNames:='科目编码'; //设置索引字段
LookCmb_SSub.Properties.ListFieldIndex:=0;
LookCmb_SSub.Properties.ListColumns[0].FieldName:='科目编码';
LookCmb_SSub.Properties.ListColumns[1].FieldName:='科目名称';

LookCmb_SSub.Properties.ListColumns[0].Width:=100;
LookCmb_SSub.Properties.ListColumns[1].Width:=100;
end;

procedure TFrm_VendorCodeYEBFind.SetLookState_SSub(aFlag:Integer);
begin
try
Case aFlag of
0:
begin
LookCmb_SSub.Visible:=True;
LookCmb_SSub.SetFocus;
end;
1:
begin
with LookCmb_SSub.Properties.DataController do
begin
aSCode:=Values[FindRecordIndexByKey(LookCmb_SSub.EditValue),0];
Edit_SSub.Text:=Values[FindRecordIndexByKey(LookCmb_SSub.EditValue),1];
end;
LookCmb_SSub.Visible:=false;
end;
end;
except
LookCmb_SSub.Visible:=false;
end;
end;

FormShow事件中打开数据集
aSqlStr:='Select DISTINCT F_Code ''科目编码'',F_Name ''科目名称'' From T_Subject order by F_Code';
SQLOpen(DM.ADOSubject,aSqlStr);
LookCmb_SSub.Properties.listSource:=DM.Ds_Subject;
SetLookCmb_Subject;

根据你的需要调用
SetLookState_SSub过程就可以了
bdmh 2009-07-21
  • 打赏
  • 举报
回复
不能自动,需要从数据库中模糊查询,然后填充到LookUpCombobox ,或者在内存中维护LookUpCombobox 中的内容副本,然后循环这个内存数据,把包含"国"的内容填充到LookUpCombobox
HelpMeNow 2009-07-21
  • 打赏
  • 举报
回复
luckyboy97

你的代码,好像不能实现这样子的功能吧
HelpMeNow 2009-07-21
  • 打赏
  • 举报
回复
cxLookupcombobox有办法吗

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧