一个对于我来说很难的问题(25分)

  • 主题发起人 devexpress
  • 开始时间
D

devexpress

Unregistered / Unconfirmed
GUEST, unregistred user!
您好!
我想把DBComboBox做成速达2000中那样,DBComboBox的items有:
<新增供应商......>// 这项是固定的
<查找供应商......>// //这项是固定的。
<供应商1> //下面是从供应商表里来的。
<供应商1>
<供应商2>
<供应商3>
....

第一个问题: 如何在通过DBcombobox读出数据库的记录之前先把

<新增供应商......>// 这项是固定的
<查找供应商......>// //这项是固定的。
加到前头。然后再读出数据库记录.

第二个问题是:
在用户选了<新增供应商.....>或<查找供应商.....>后弹出
供应商的查找或新增窗口,返回后将供应商的字符串填到DBComboBox
的Text中.我本来以为这没有什么,但具体一试才发现要想在
DBComboBox的onchange事件中对Combobox的Text赋值是没有用.

第三个问题,如何给dbcombobox付一个默认值。

谢谢,
 
最好不要用dbcombobox,而是自己处理。
如果要用,赋值最好用dbcombobox.itemindex:=dbcombobox.items.indexof('aval')
赋默认值也是这样。
最好是用combobox。把内容通过query查询出来装入combobox
 
通用的做法一般用Combobox,这样的话处理起来就很容易了!
 
这种情况下当然不便用DBComboBox这样的敏感控件了
用普通的ComboBox,通过程序控制
第一、二项是固定的
后面的从数据集里读入
把<供应商>名称写到string中,把其对应的主键Id(如果有的话)值写到Object中
 
如果有这样一个控件给150分。
 
第一:建个函数

给你个例子
type
TData = class
dcid:string;
end;
//从表中取数据往传入控件里加电厂名称(在名称对应影含着编码)
procedure p_adddcmc(combobox:tcombobox);

procedure Tjx_jxrwwh_main.FormDestroy(Sender: TObject);
var
i:integer;
begin
for i:=0 to CbX_dcmc.Items.Count-1 do
Tdata(CbX_dcmc.Items.Objects).free;
end;

procedure Tjx_jxgywh_main.p_adddcmc(combobox:tcombobox);
var Ldata:Tdata;
begin
combobox.items.clear;
qry_TB_JXGL_RWWH1.close;
qry_TB_JXGL_RWWH1.sql.clear;
qry_TB_JXGL_RWWH1.sql.add
('select dcid,DCMC from TB_JCWH_DCDW order by dcid');
try
qry_TB_JXGL_RWWH1.open;
except
exit;
end;

try
Ldata:=Tdata.Create;
except
exit;
end;
//
Ldata.dcid:='新增供应商';
combobox.Items.AddObject('新增供应商',Ldata);
//
Ldata.dcid:='查找供应商';
combobox.Items.AddObject('查找供应商',Ldata);

qry_TB_JXGL_RWWH1.First;
while not qry_TB_JXGL_RWWH1.eof do
begin
Ldata.dcid:=qry_TB_JXGL_RWWH1.Fields[0].AsString;
combobox.Items.AddObject(qry_TB_JXGL_RWWH1.Fields[1].AsString,Ldata);
qry_TB_JXGL_RWWH1.next;
end;
end;
//取到当前的电厂编码
fcurrentdcid:=TData(CbX_dcmc.Items.Objects[CbX_dcmc.ItemIndex]).dcid

第二:新增供应商完了后重新调用函数重新建combobox
第三:定位最好以Objects的数值进行定位
//返回你要找的索引值
Function GetCodeIndex(combobox:tcombobox;pCode:string):integer;
function Tjx_jxgywh_main.GetCodeIndex(combobox:tcombobox;pCode: string): integer;
var
i:integer;
begin
result:=0;
for i:=0 to ComboBox.Items.Count - 1 do
begin
if (ComboBox.Items.Objects<>nil) and (pCode = TDataCode(ComboBox.Items.Objects).Code) then
begin
result:=i;
break;
end;
end;
//根据索引值去定位
procedure SelectItem(combobox:tcombobox;Index:integer);
procedure TComboBoxFrame.SelectItem(combobox:tcombobox;Index: integer);
begin
if Index < 0 then exit;
if ComboBox.Items.Count > index then
begin
ComboBox.ItemIndex:=index;
end;
end;
end;
 
顶部