請問有關 ComboBox 的問題 |
尚未結案
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
|
carter6
初階會員 發表:53 回覆:108 積分:42 註冊:2002-12-16 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
carter6
初階會員 發表:53 回覆:108 積分:42 註冊:2002-12-16 發送簡訊給我 |
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
你好:
基本上你問題若是沒理解錯誤的話,你的設計方式在存取 ComboBox 時會很麻煩
誠如其他大大所說,若是同名字,操作者在識別上會有問題。
--------
...我有一個部門的Table,裡面有部門編號及部門名稱兩個欄位,我現想將部門編號及部門名稱使用ComboBox 給add 進來,但我只想顯示部門名稱,在存做儲存時,只存部門編號,請問我要如何做呢?
-----
以上你的要求,是可以用其他方式,但無法用 COMBOBOX 單純作到(要有一翻修改),可以在OnCloseUp 事件,下query查詢,用名稱查詢,填回代號,即可,但是若是同名資料,問題又出來了! 只顯示單一欄位,就要 "要求"使用者不可輸入同名之顯示資料,像本案例中,有多名"李正賢",若是用名字單一顯示,操作者將無法選擇!
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
To: kwon ComboBox.Items中除了可以儲存文字外還可以額外放個物件(TObject),利用此屬性可以達到你所說的功能
Type TSelectItem=Class No : String ; Name:String; End; procedure TForm1.Button2Click(Sender: TObject); Var Si:TSelectItem ; i : Integer ; begin If Combobox1.items.Count =0 Then Begin // 加入Items的內容 Si := TSelectitem.Create; Si.No := 'No:1'; Si.Name := 'Name:1'; Combobox1.Items.AddObject(Si.No,Si); Si := TSelectitem.Create; Si.No := 'No:2'; Si.Name := 'Name:2'; Combobox1.Items.AddObject(Si.No,Si); End Else Begin If Combobox1.ItemIndex <> -1 Then Begin Si := TSelectItem(Combobox1.Items.Objects[Combobox1.ItemIndex]) ; ShowMessage(Si.Name); Si := nil ; End; // 清除內容 For i:= Combobox1.Items.Count-1 Downto 0 Do Begin TSelectItem(ComboBox1.Items.Objects[i]).Free; Combobox1.Items.Delete(i); End; End; end;其中 的TSelectItem 我使用物件而不用Record,是因為Record與TObject的轉換我不會,如果可以用Record的話,對記憶體的使用可以少一些, |
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
// 先清除內容() For i:= Combobox1.Items.Count-1 Downto 0 Do Begin TSelectItem(ComboBox1.Items.Objects[i]).Free; Combobox1.Items.Delete(i); End; // 加入Items的內容 Table1.First; Whilt Not Table1.Eof Do Begin Si := TSelectitem.Create; Si.No := Table1.FieldByname('No').AsString; Si.Name := Table1.FieldByname('Name').AsString; Combobox1.Items.AddObject(Si.No,Si); Table1.Next; End; |
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
真對不起,這晚才來回覆,因為我在寫這個程式及在尋找錯誤,我發現如果將它寫成procedure 就沒有作用,我將我的程式碼貼上來,請您們幫我看看那裡錯了,謝謝! unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, StdCtrls; type
TSelectItem = Class
No : String;
Name : String;
end; type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Query1: TQuery;
Database1: TDatabase;
procedure DptAdd;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
Dpt : TSelectItem;
implementation {$R *.dfm} procedure TForm1.DptAdd;
var I:Integer;
begin Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select Dep_ID, Dep_Name from DEPARTMENT');
Query1.Open; for i:= ComboBox1.Items.Count-1 Downto 0 Do
begin
TSelectItem(ComboBox1.Items.Objects[i]).Free;
ComboBox1.Items.Delete(i);
end;
// 加入Items的內容
Query1.first;
While Not Query1.Eof Do
begin
Dpt := TSelectitem.Create;
Dpt.No := Query1.Fields[0];
Dpt.Name := Query1.Fields[1]; //FieldByname('Dep_Name').AsString;
ComboBox1.Items.AddObject(Dpt.Name,Dpt);
Query1.Next;
end;
end; procedure TForm1.FormShow(Sender: TObject);
begin
DptAdd;
end; end.
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, StdCtrls; type TSelectItem = Class No : String; Name : String; end; type TForm1 = class(TForm) ComboBox1: TComboBox; Query1: TQuery; Database1: TDatabase; procedure DptAdd; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Dpt : TSelectItem; implementation {$R *.dfm} procedure TForm1.DptAdd; begin qryDept.Close; qryDept.SQL.Clear; qryDept.SQL.Add('Select Dep_ID, Dep_Name from DEPARTMENT ORDER BY Dep_Name'); qryDept.Open; ComboBox1.items.Clear ; ComboBox1.Items.BeginUpdate ; // 加入Items的內容 Query1.first; While Not Query1.Eof Do begin ComboBox1.Items.Add(qryDept.Fields[1].AsString) ; qryDept.Next; end; ComboBox1.items.EndUpdate ; end; procedure TForm1.FormShow(Sender: TObject); begin DptAdd; end; end. //你不論如何選擇,你的 Combobox1 都會傳來一個數值,ComboBox1.ItemIndex 。 //你要找出 department number 不難: //Combobox 的 itemindex 由零開始 //query 的 record number 由一開始 qryDept.RecNo := ComboBox1.ItemIndex 1 ; // 去到指定的 record strDepNo := qryDept.Fields[0].AsString ; //抓取要用的 department number //你已經拿到要用的 department number 了這個程式運行時,你的 query 不要關閉,那你一定可以找到你要的 department number 。 發表人 - TATSU 於 2004/02/22 16:33:28 |
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |