全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1868
推到 Plurk!
推到 Facebook!

為何TDBGrid使用Columns.Add後,原本的欄位會不見?

尚未結案
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-08 14:41:45 IP:61.59.xxx.xxx 未訂閱
請問各位先進高手們... 我想在原來的TDBGrid新增一個虛擬欄位... 但新增後卻會使原本存在TDBGrid的欄位不見,只剩下一個我新增的欄位? 如DBG_Ext本來有a,b,c,d,e五個欄位... 但執行過下程式碼之後....畫面上的欄位就只剩下一個而已? 原來的a,b,c,d,e欄都不見了??? procedure TStatEdit.Button1Click(Sender: TObject); Var ColumnA : TColumn; begin ColumnA:= DBG_Ext.Columns.Add; end; 煩請先進高手們解惑....感謝不盡... 開發軟體:DELPHI3
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-08 14:57:26 IP:211.21.xxx.xxx 未訂閱
引言: 請問各位先進高手們... 我想在原來的TDBGrid新增一個虛擬欄位... 但新增後卻會使原本存在TDBGrid的欄位不見,只剩下一個我新增的欄位? 如DBG_Ext本來有a,b,c,d,e五個欄位... 但執行過下程式碼之後....畫面上的欄位就只剩下一個而已? 原來的a,b,c,d,e欄都不見了??? procedure TStatEdit.Button1Click(Sender: TObject); Var ColumnA : TColumn; begin ColumnA:= DBG_Ext.Columns.Add; end; 煩請先進高手們解惑....感謝不盡... 開發軟體:DELPHI3
因為您是動態加入一個Column,所以您必須在DBG_Ext(您的DBGrid)加入所有的欄位(a,b,c,d,e欄),如此您加入一個Column,才不會剩下您加入的Column而已,原來的Column也會存在,您可以試試看。 [補充:]如何在TDBGrid加入所有的欄位: 在DBGrid按滑鼠右鍵選擇Columns Editor,在Columns Editor按按滑鼠右鍵選擇Add All Fields即可加入所有的欄位。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-08 14:59:24 IP:218.16.xxx.xxx 未訂閱
完全不設定欄位 = 預設的顯示所有欄位 若你手動增加欄位,便要全部手動設置 所以你要加虛擬欄位,要先設置好真實欄位
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-12 09:39:35 IP:61.155.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject); Var ColumnA : TColumn; begin DBGrid1.Columns.Insert(DBGrid1.Columns.Count ); ColumnA:=DBGrid1.Columns.Items[DBGrid1.Columns.Count-1]; ColumnA.Title.Caption:='OK'; end;    风花雪月 e梦情缘
------
风花雪月 e梦情缘
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-12 10:03:17 IP:218.16.xxx.xxx 未訂閱
wnhoo 兄你有沒有測試過你的程式碼? 我測試時只會出現 index out of bound (如 Channel 兄和小弟所說的) 記得原先的情況是沒設定任何 Column 的 若設定好其他欄位,貼題者的 Columns.Add 就已經足夠且更簡單。 小弟也想找到一個使用DBGrid能不預先設定任何欄位就可增加欄位而不影響舊有欄位的方法 (不包括自制元件/使用第三者元件),所以若你的方法可行可否詳細一點,因為小弟實在試不出這個效果。 附帶一題,我之前的 post 寫之前未見 Channel 兄的 post 所以才出, Channel 兄的解釋已經詳細完整。
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-12 10:57:13 IP:61.155.xxx.xxx 未訂閱
sorry,我测试的时候已经在Columns Editor按按滑鼠右鍵加入一个欄位。 修改如下: procedure TForm1.Button1Click(Sender: TObject); Var ColumnA : TColumn; begin IF   DBGrid1.Columns.Count>1 THEN BEGIN DBGrid1.Columns.Insert(DBGrid1.Columns.Count ); ColumnA:=DBGrid1.Columns.Items[DBGrid1.Columns.Count-1]; ColumnA.Title.Caption:='OK'; END ELSE BEGIN ColumnA:=DBGrid1.Columns.Add ; ColumnA.Title.Caption:='OK'; END; end;    其实rich777的方法也没错呀,我在D6中测试的           风花雪月 e梦情缘
------
风花雪月 e梦情缘
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-12 11:15:02 IP:218.16.xxx.xxx 未訂閱
當你沒設定任何 Column 時一樣報錯啦,因為未設定任何 Column 時會自動加入所有 Column, 即 Column.Count 是實則欄位的總數,能通過你的 if Count > 1 但一旦你 insert 一個 Column 則所有自動加入的欄位會自動取消而 Column Count 歸 0, 你卻要插入第 n 欄之後自然出錯。 雖說資料表只得一個欄位是不會出錯(不過該欄位仍會自動取消),但像rich777原來的一句 ColumnA:= DBG_Ext.Columns.Add; 就可達到一樣效果了。
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-12 16:26:29 IP:61.59.xxx.xxx 未訂閱
誠如Justmade版大所言的 而若想以Column Count的方式先加入原來的a,b,c,d... 再新一個想加入的虛擬欄位 則會出現錯誤 for i := 0 to DBG_Ext.Columns.Count-1 do begin     ColumnA:=DBG_Ext.Columns.Items[i];     ColumnA:= DBG_Ext.Columns.Add; end; 當一圈跑完要時DBG_Ext.Columns.Count=1了... 因為DBG_Ext.Columns.Add時就將原來的清光了 所以我又想一個變數先接受原來DBG_Ext的欄位內容再回傳回去... 結果還是不行...是出現一個空表的表格而已...喪失了資料連結的功能???? 程式碼如下: Var ColumnA,ColumnB : TColumn; I:integer; begin DBG_temp:=DBG_Ext; for i := 0 to DBG_temp.Columns.Count-1 do begin ColumnA:=DBG_temp.Columns.Items[i]; ColumnA:= DBG_Ext.Columns.Add; ColumnB:= DBG_Ext.Columns.Add; end; DBG_Ext:=DBG_temp; end; 看來動態加入欄位的方式是不可行了~~~如Justmade版大所言 完全不設定欄位 = 預設的顯示所有欄位 若你手動增加欄位,便要全部手動設置 所以你要加虛擬欄位,要先設置好真實欄位
charlin
一般會員


發表:0
回覆:1
積分:0
註冊:2005-06-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-15 11:05:41 IP:61.219.xxx.xxx 未訂閱
有一個簡單的方法 就是利用SQL 的SELECT Statement 動態做出一個虛擬欄位,醬子DataSet就不會對應不到欄位啦 例如:想要動態新增一個顯示相片的欄位 SQL屬性: select ' ' as pic, * from employee //注意' '裡有一格空格, 不然在delphi裡會出現sql語法錯誤 用這句SQL去取得的Dataset就會有一個pic欄位, DBGrid就可以對應到它了
系統時間:2024-05-19 20:35:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!