為何TDBGrid使用Columns.Add後,原本的欄位會不見? |
尚未結案
|
rich777
一般會員 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
請問各位先進高手們...
我想在原來的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 發送簡訊給我 |
引言: 請問各位先進高手們... 我想在原來的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 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
wnhoo 兄你有沒有測試過你的程式碼? 我測試時只會出現 index out of bound (如 Channel 兄和小弟所說的) 記得原先的情況是沒設定任何 Column 的 若設定好其他欄位,貼題者的 Columns.Add 就已經足夠且更簡單。 小弟也想找到一個使用DBGrid能不預先設定任何欄位就可增加欄位而不影響舊有欄位的方法 (不包括自制元件/使用第三者元件),所以若你的方法可行可否詳細一點,因為小弟實在試不出這個效果。 附帶一題,我之前的 post 寫之前未見 Channel 兄的 post 所以才出, Channel 兄的解釋已經詳細完整。
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
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 發送簡訊給我 |
當你沒設定任何 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 發送簡訊給我 |
誠如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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |