有關在 TWWDBGRID 上動態新增 TWWDBLOOKUPCOMBO 的語法 |
尚未結案
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
各位大大好:
上次請教了有關如何動態在 inforpower 的 twwdbgrid 產生欄位,得到不少啟發,當時的解答如下
The following will clear the grid's selected property and add two fields, each with a display width of 10. with wwDBGrid1 do
begin
Selected.Clear;
Selected.Add('Buyer' #9 '10' #9 'Buyer');
Selected.Add('First Name' #9 '10' #9 'First Name');
ApplySelected;
end; 但我想在上面加一個 twwdblookupcombo 加不上,我用的語法如下 controltype.add('Buyer;customedit;twwdblookupcombo1;F');
一直無法將 TWWDBLOOKUPCOMBO1 加到 TWWDBGRID 上,不知是否有仁人君子知道正確的語法
謝謝 如果愛情也有味覺
那麼 有沒有ㄧ種愛
微微泛酸 不太苦澀 有點甜密
嚐起來的滋味讓人想起幸福
Thomas Chiou
------
Thomas Chiou |
l630521
資深會員 發表:15 回覆:349 積分:372 註冊:2003-02-17 發送簡訊給我 |
|
yachanga
資深會員 發表:24 回覆:335 積分:296 註冊:2003-09-27 發送簡訊給我 |
Hi thomas0728:
You can reference online Help.. property ControlType: TStrings; Description This property holds information about the type of control used to display a field if the field is contained within a grid component. The default value is Field. To change this property at runtime, see the SetControlType method of the TwwDBGrid component. Following is my suggestion:
wwDBGrid1.SetControlType('Buyer',fctCustom,'wwDBLookupCombo1'); 發表人 - yachanga 於 2004/05/24 10:20:44
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
謝謝各位大大:
wwDBGrid1.SetControlType('Buyer',fctCustom,'wwDBLookupCombo1');
語法是沒錯的,之所以無法使用經過我痛苦的研究有幾點根各位報告一下
一. WWDBGRID 的 READONLY 不能設為 True
二, wwdblookupcombo.LOOKFIELD 的大小寫有影響
三.欄位長度的大小也有影響
以上供各位參考
但,我現在又面臨一個奇怪的問題
PROCEDURE TFORM1.TEST
VAR
FWWDBLOOKUPCOMBO:ARRAY OF TWWDBLOOKUPCOMBO;
BEGIN
SETLENGTH(FWWDBLOOKUPCOMBO,1);
FWWDBLOOKUPCOMBO:=TWWDBLOOKUPCOMBO.CREATE(SELF);
FWWDBLOOKUPCOMBO[0].LOOKTABLE:=ADODATASET2;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
這行會出現如下的錯誤 '' HAS NO PARANT WINDOWS
為什麼會這樣,我有指定為 SELF
真是奇怪 如果愛情也有味覺
那麼 有沒有ㄧ種愛
微微泛酸 不太苦澀 有點甜密
嚐起來的滋味讓人想起幸福
Thomas Chiou
------
Thomas Chiou |
l630521
資深會員 發表:15 回覆:349 積分:372 註冊:2003-02-17 發送簡訊給我 |
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
沒錯,確實要在指定
wwdblookupcombo.parent:=self; 的值
但我另外又發現另一個很奇特的問題,那是是如果我在 form 上先行放入
wwdblookupcombo1 則執行
wwdbgrid1.setcontroltype('Buyer'fctcustom,'wwdblookupcombo1');
沒問題, wwdblookupcombo1 會加到 wwdbgrid 上
但如果我是動態產生 wwdblookupcombo,比如
PROCEDURE TFORM1.TEST
VAR
FWWDBLOOKUPCOMBO2:TWWDBLOOKUPCOMBO;
BEGIN
FWWDBLOOKUPCOMBO2:=TWWDBLOOKUPCOMBO.CREATE(SELF);
FWWDBBLOOKUPCOMBO2.PARENT:=SELF;
FWWDBLOOKUPCOMBO2.LOOKTABLE:=ADODATASET2;
....
...
然後執行
wwdbgrid1.setcontroltype('Buyer'fctcustom,'wwdblookupcombo2');
就不會加到 WWDBGRID1 上,只會在畫面上顯示 wwdblookupcombo2
理論上不該有這種情形才對,不知我那裡設的有問題,還是我見鬼了
為了使用這個 WWDBLOOKUPCOMBO 搞了三,四天,不停的試過各種方法,真是不
SMART 的元件
< >< > 如果愛情也有味覺
那麼 有沒有ㄧ種愛
微微泛酸 不太苦澀 有點甜密
嚐起來的滋味讓人想起幸福
Thomas Chiou
------
Thomas Chiou |
yachanga
資深會員 發表:24 回覆:335 積分:296 註冊:2003-09-27 發送簡訊給我 |
Hi thomas0728您好:
我剛剛也試了一下,發現真的動態產生的TwwLookUpCombo後在設定ControlType沒有效果說
這算是 > class="code"> procedure TForm1.wwDBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
Var
i: Integer;
begin
for i:=0 to 1 do begin
if (gdFocused in State) then
begin
if (Field.FieldName = wwDBLookupCombo[i].DataField) then
with wwDBLookupCombo[i] do
begin
Left := Rect.Left wwDBGrid1.Left 2;
Top := Rect.Top wwDBGrid1.Top 2;
Width := Rect.Right - Rect.Left;
Width := Rect.Right - Rect.Left;
Height := Rect.Bottom - Rect.Top; Visible := True;
end;
end
end;
end; procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
setlength(wwDBLookupCombo,1);
for i:=0 to 1 do begin
wwDBLookupCombo[i]:=TwwDBLookupCombo.Create(self);
wwDBLookupCombo[i].Parent:=self;
wwDBLookupCombo[i].DataSource:=query1.DataSource;
wwDBLookupCombo[i].LookupTable:=query2;
end;
wwDBLookupCombo[0].DataField:='PROD';
wwDBLookupCombo[0].LookupField:='PROD';
wwDBLookupCombo[1].DataField:='LOT_NO';
wwDBLookupCombo[1].LookupField:='LOT_NO'; end; procedure TForm1.wwDBGrid1ColExit(Sender: TObject);
Var
i:Integer;
begin
for i:=0 to 1 do begin
if wwDBGrid1.SelectedField.FieldName = wwDBLookupCombo[i].DataField then
wwDBLookupCombo[i].Visible := False;
end; end; 發表人 - yachanga 於 2004/05/25 23:31:24
|
l630521
資深會員 發表:15 回覆:349 積分:372 註冊:2003-02-17 發送簡訊給我 |
我試了一下,
PROCEDURE TFORM1.TEST VAR FWWDBLOOKUPCOMBO2:TWWDBLOOKUPCOMBO; BEGIN FWWDBLOOKUPCOMBO2:=TWWDBLOOKUPCOMBO.CREATE(SELF); FWWDBLOOKUPCOMBO2.Visible := False FWWDBLOOKUPCOMBO2.Name := 'wwdblookupcombo2'; FWWDBBLOOKUPCOMBO2.PARENT:=SELF; FWWDBLOOKUPCOMBO2.LOOKTABLE:=ADODATASET2; wwDBGrid1.controltype.add('Buyer;customedit;wwdblookupcombo2;F');應該是沒問題的,我猜原因應該是你的FWWDBBLOOKUPCOMBO2.Name沒有指定,所以你增加的名字不對吧,你可以看一下你動態新增的Name是什麼,至於Visible要設成False原因是,動態新增完畢後,它會直接show在Form上面,所以我把它隱藏起來。 參考看看.... Ian |
yachanga
資深會員 發表:24 回覆:335 積分:296 註冊:2003-09-27 發送簡訊給我 |
多謝l630521提醒...原來是Name必須額外指定..多學了一招 指定 class="code">
procedure TForm1.Button3Click(Sender: TObject);
Var
wwDBLookupCombo:Array of TwwDBLookupCombo;
i: Integer;
begin
SetLength(wwDBLookupCombo,10);
for i:=0 to 9 do begin
wwDBLookupCombo[i]:=TwwDBLookupCombo.Create(self);
wwDBLookupCombo[i].Parent:=Self;
wwDBLookupCombo[i].Visible:=false;
//wwDBLookupCombo[i].LookupTable:=ADOQuery2;
//wwDBLookupCombo[i].LookupField:=Field[i];
wwDBLookupCombo[i].Name:='FwwDBLookupCombo' inttostr(i);
wwDBGrid1.SetControlType(wwDBGrid1.Fields[i].FieldName,fctCustom,'FwwDBLookupCombo' inttostr(i));
end; end;
~悠遊法國號~
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |