ComboBox可以顯示2個Field的資料嗎? |
尚未結案
|
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
1.
ComboBox1.Items.add(Query1.FieldByName('StudentID').Vlaue ',' Query1.FieldByName('StudentName').Vlaue);
//如何取得值
procedure TForm1.Button1Click(Sender: TObject);
var
my: string;
my2: TStringList;
begin
my2:= TStringList.Create ;
my:=ComboBox1.Text;
my2.Text := StringReplace(my,',',#13#10,[rfReplaceAll, rfIgnoreCase]);
showmessage(my2[0]);//'StudentID'的值
showmessage(my2[1]);//'StudentName'的值
my2.Free;
end;
發表人 - chih 於 2003/03/20 12:40:11
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言: 1.請問有人知道ComboBox可以顯示2個Field的資料嗎? eg: StudentID StudentName 和要如何讀取 ComboBoxField1, Field2的資料呢? No, you need to 'create' a new field (e.g. calculated field) yourself. 2.DBGrid的datasource可以是自已declare的array嗎?可不可以教小妹一下做法呢?謝謝? No, an alternate way is to use TClientDataset. A search on "clientdataset" should give you some hints. href="http://bdn.borland.com/delphi/database/0,1418,10004,00.html">http://bdn.borland.com/delphi/database/0,1418,10004,00.html for clientdataset. Here is an introduction: http://bdn.borland.com/article/0,1410,28876,00.html |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
1. ComboBox 本身很難有效的顯示2個 fields,即使用 filed1.AsString field2.AsString , 排列不好看且讀回也困難。 若你的用處是 lookup , 可考慮用 DBLookUpComboBox :
Query1 :
Table : TestResult
Field : TestID, StudentID, Marks,.... Query2 :
Table : Student
FIeld : StudentID, StudentName,.... DataSources1 -> Query1
DataSources2 -> Query2 DBLookUpComboBox
DataSources : DataSources1
DataField : StudentID
ListSources : DataSources2
KeyField : StudentID
ListField : StudentName;StudentID (或 StudentID;StudentName) 當使用時,DBLookUpComboBox 的顯示只會示出 ListField 的第一項,但當使用者按下 ▼ 時,下面列出的就會整齊的列出 StudentName | StudentID。使用者選定後,選定的 StudentID 自動會放入 Query1 的 StudentID 欄。 2. 使用 TClientDataSet 會比較好
不連結數量庫而使用 TClientDataSet
a. 雙擊 該 ClientDataSet
b. 右擊,選 New Field 來加入欄位
c. 加入所有欄位後右擊該 ClientDataSet, 選 Create DataSet 即可
d. 將 dbGrid 連到這個 ClientDataSet, 並如一般 table/query 使用。 你可參考我在 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27190 的例子。
|
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
不會立即儲存的,就如你在 dbEdit 修改了東西一樣,要 post 才儲存。不會用也沒問題,按我上面的設定就可以了。 但若你完全不用感知元件來修改資料 (即用 Edit 不用 TEdit),那便沒辦法達到這個方便又好看的較果了,你可考慮用 :
while not studTable.eof do begin ComboBox1.Items.add(Format('%5s|%s',[StudTable.FieldByName('StudentID').AsString, StudTable.FieldByName('StudentName').AsString]); // '%5s|%s' 的 5 指 5個位,可改 studTable.next; end;這會排得好看一點。 取資料時你可用 Trim(Copy(ComboBox1.Text,1,5)) // 5 跟上面的同 Copy(ComboBox1.Text,7,10) // 10 應改為 StudentName 的欄寬 來分別取得 StudentID, 及 StudentName |
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
你是指 DbLookUpComboBox 嗎?
若是的話這應該是因為 :
1. Query1 的 RequestLive 是 false (或 Table1 的 ReadOnly 是 True) 以致數據不能被修改 或
2. DataSources1 的 AutoEdit 是 false 以致元件不能自動進入 Edit 模式。 若你有其他原因要這樣設定,可考慮 Combo Box 那個方法,另補充一點要用固定字寬字形(如 Courier)才會整齊。 若覺得 | 兩邊太緊也可將 '%5s|%s' 改為 '%5s | %s' 。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |