论坛上的各位朋友,大家好,想向各位朋友请教一个动态在DBGRIDEH里面添加内容的问题有表1和表2表1内容
姓名 年龄
张三 18
张三哥 20
张三大哥 40
李四 19
李四哥 30表2内容姓名
张三
张三哥
张三大哥
李四
李四哥
然后在程序里面添加一个DBGRIDEH和一个ADOQUERY还有一个DATASET,DBGRIDEH里面显示的是表1的内容,也就是说,只有姓名和年龄两列数据当用户在DBGRIDEH的列1,也就是姓名该列,输入一个“张”的时候,希望马上可以跳出一个下拉菜单,下拉菜单的内容为“表2”里面以“张”字开头的所有记录,其它的不要,然后可以供用户方便选择,如果用户输入的是一个“李”字,下拉菜单的内容为“表2”里面以“李”字开头的所有记录。
论坛上的各位朋友,请问这个需求可以实现吗?如果能实现,请各位朋友告知方法,衷心感谢!!!
姓名 年龄
张三 18
张三哥 20
张三大哥 40
李四 19
李四哥 30表2内容姓名
张三
张三哥
张三大哥
李四
李四哥
然后在程序里面添加一个DBGRIDEH和一个ADOQUERY还有一个DATASET,DBGRIDEH里面显示的是表1的内容,也就是说,只有姓名和年龄两列数据当用户在DBGRIDEH的列1,也就是姓名该列,输入一个“张”的时候,希望马上可以跳出一个下拉菜单,下拉菜单的内容为“表2”里面以“张”字开头的所有记录,其它的不要,然后可以供用户方便选择,如果用户输入的是一个“李”字,下拉菜单的内容为“表2”里面以“李”字开头的所有记录。
论坛上的各位朋友,请问这个需求可以实现吗?如果能实现,请各位朋友告知方法,衷心感谢!!!
解决方案 »
- 商业软件中使用了LGPL/MPL两种许可证的代码,怎么在产品中作版权声明或者其他必须遵守的义务!?才能避免版权问题?
- 注册了
- 检查任意EXE文件是否有外部调用命令行及格式
- 请高手指点,这段条件代码怎么写?
- 小问题
- 在软件公司中Delphi用怎么连数据库
- 用websnap方面的问题
- 解决给分!!!!!!
- DELPHI控件问题
- 使用“move(buffer^,pchar(@rbuf^),bufferlength);”报错:pointer type required
- 怎样的水平才叫精通delphi
- 有关使用indy组件的socket 错误 10048 Address already in use的问题
2008年07月15日 周二 高新技术企业IT、电子 在海淀分部举行
招聘会 http://www.palmjob.net/zhpd/
北京招聘会 http://www.palmjob.net/zhpd/bjindex.jsp
輸入“张”,就在表2用一個sql模糊查找出“张”開頭的記錄
begin
//响应第一列
if DBGridEh1.SelectIndex=0 then
begin
//动态创建一个edit;或者在窗体上放个visible为false的edit,点击本列的时候自动弹出,并设为焦点,输入值回车后自动刷新adoquery进行模糊匹配筛选
end;
end;
这个 picklist 内容就是你模糊查找到的内容
然后参考如下代码:procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
if ActiveControl = DBGrid1 then begin
TDBGrid(ActiveControl).SelectedIndex := TDBGrid(ActiveControl).SelectedIndex + 1;
Key := #0;
end;
end;procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
If DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then
begin
DBComboBox1.Visible := false;
end;
end;
然后 datasource 设置和dbgrideh 同样的,在 listsource .连接到一个 你将要做模糊查找的查询
查询要设置好 parameters 属性里面添加 条件 pm ,
查询语句:SELECT 商品批次.商品批次编号, 商品目录.商品品名 as 商品名称, 商品批次.商品规格, 商品批次.商品条码, 商品批次.商品助记码, 商品批次.批号, 商品批次.厂家, 商品批次.有效期
FROM 商品批次 INNER JOIN 商品目录 ON 商品批次.商品 = 商品目录.商品编号
where 商品目录.商品品名 like :pm ;设置好 listfield 就是列表框出现的字段 ,和 keyfield 和你要录入的数据连接的字段名。
把dblooklistbox1 默认隐藏。//在商品字段录入框下面显示这个dblooklistbox 列表框,并确定位置
procedure Tspgl_sprkfrm.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
if gdFocused in State then
begin
if column.FieldName='商品' then
begin
spcx_list.Top:=DBGridEh1.Top+rect.Bottom;
spcx_list.Left:=rect.Left+DBGridEh1.Left;
spcx_list.Height:=DBGridEh1.Height-rect.Top;
spcx_list.Visible:=true;
end
else
spcx_list.Visible:=false;
end;
end;//当不在这个字段的时候 隐藏procedure Tspgl_sprkfrm.DBGridEh1ColExit(Sender: TObject);
begin
if DBGridEh1.SelectedField.FieldName='商品' then
data.spgl_xzsp_ds.DataSet:=data.spgl_sppc_Tab
else
end;,
//模糊查询功能,根据在商品里面输入的内容 ,通过模糊查询语句自动筛选,达到列表框的内容根据输入的内容随时变化
//这里取出输入文字我查了很久才找到办法的,就是这个 TInplaceEdit(DBGridEh1.Controls[0]).Text
procedure Tspgl_sprkfrm.DBGridEh1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var sp:string;
begin
if DBGridEh1.SelectedField.FieldName='商品' then
begin
if DBGridEh1.ControlCount>0 then sp:= TInplaceEdit(DBGridEh1.Controls[0]).Text; //取出输入的文字
data.spgl_xzsp.close;
data.spgl_xzsp.Parameters.ParamByName('pm').Value:='%'+sp+'%';//'%水%';
data.spgl_xzsp.Open;
data.spgl_xzsp_ds.DataSet:=data.spgl_xzsp;
end;
end;我这里用"商品" 字段保存商品的名称,还有个问题没解决,就是在列表框里选择后的代码。
以上不对的地放请大家指正,不过楼主的问题已经在这里解决了。