線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1680
推到 Plurk!
推到 Facebook!

請問如何在DBGrid的Cell中編輯memo的內容

尚未結案
mother9156
一般會員


發表:1
回覆:4
積分:1
註冊:2004-12-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-13 18:17:17 IP:61.222.xxx.xxx 未訂閱
各位大大,小弟有一事不明,為何在DBGrid的Cell中無法編輯memo的內容, 參考了諸多文章,只看到能「顯示」memo的內容,實無法在Cell中輸入memo, 請勞神相助,多謝!
kevinguo
初階會員


發表:1
回覆:31
積分:31
註冊:2002-11-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-14 00:44:14 IP:59.113.xxx.xxx 未訂閱
mother9156 你好:    試試以下程式碼  < class="code"> type TDBGrid = class(DBGrids.TDBGrid) protected function CanEditModify: Boolean;override; end; type TForm1 = class(TForm) ........... ........... implementation const ftNonTextTypes = [ftBytes, ftVarBytes, ftBlob,ftGraphic,ftParadoxOle,ftDBaseOle, ftTypedBinary, ftCursor, ftADT, ftArray, ftReference, ftDataSet]; function TDBGrid.CanEditModify: Boolean; begin inherited CanEditModify; end; //我測試的Memo欄位為Memo1,在GetText和SetText加入以下程式碼 procedure TForm1.ADOTable1Memo1GetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text:=Copy(Sender.Value,1,length(Sender.Value)); end; procedure TForm1.ADOTable1Memo1SetText(Sender: TField; const Text: String); begin Sender.Value:=Text; end;
mother9156
一般會員


發表:1
回覆:4
積分:1
註冊:2004-12-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-14 07:06:29 IP:61.222.xxx.xxx 未訂閱
kevinguo 您好: 先感謝您的回覆,在下試過您的程式碼,好像還是無法在Grid的Cell中 編輯memo欄位,特貼上我的程式碼,尚請過目,謝謝! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, ADODB; type TDBGrid = class(DBGrids.TDBGrid) protected function CanEditModify: Boolean; end; type TForm1 = class(TForm) ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; ADOQuery1class: TStringField; ADOQuery1id: TStringField; ADOQuery1DSDesigner17: TMemoField; procedure ADOQuery1DSDesigner18GetText(Sender: TField; var Text: String; DisplayText: Boolean); procedure ADOQuery1DSDesigner18SetText(Sender: TField; const Text: String); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation const ftNonTextTypes = [ftBytes, ftVarBytes, ftBlob,ftGraphic,ftParadoxOle,ftDBaseOle, ftTypedBinary, ftCursor, ftADT, ftArray, ftReference, ftDataSet]; function TDBGrid.CanEditModify: Boolean; begin inherited CanEditModify; end; {$R *.dfm} procedure TForm1.ADOQuery1DSDesigner18GetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text:=Copy(Sender.Value,1,length(Sender.Value)); end; procedure TForm1.ADOQuery1DSDesigner18SetText(Sender: TField; const Text: String); begin Sender.Value:=Text; end; end.
mother9156
一般會員


發表:1
回覆:4
積分:1
註冊:2004-12-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-14 07:12:18 IP:61.222.xxx.xxx 未訂閱
kevinguo 您好: 先感謝您的回覆,在下試過您的程式碼,好像還是無法在Grid的Cell中 編輯memo欄位,特貼上我的程式碼,尚請過目,謝謝! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, ADODB; type TDBGrid = class(DBGrids.TDBGrid) protected function CanEditModify: Boolean; end; type TForm1 = class(TForm) ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; ADOQuery1class: TStringField; ADOQuery1id: TStringField; ADOQuery1DSDesigner17: TMemoField; procedure ADOQuery1DSDesigner18GetText(Sender: TField; var Text: String; DisplayText: Boolean); procedure ADOQuery1DSDesigner18SetText(Sender: TField; const Text: String); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation const ftNonTextTypes = [ftBytes, ftVarBytes, ftBlob,ftGraphic,ftParadoxOle,ftDBaseOle, ftTypedBinary, ftCursor, ftADT, ftArray, ftReference, ftDataSet]; function TDBGrid.CanEditModify: Boolean; begin inherited CanEditModify; end; {$R *.dfm} procedure TForm1.ADOQuery1DSDesigner18GetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text:=Copy(Sender.Value,1,length(Sender.Value)); end; procedure TForm1.ADOQuery1DSDesigner18SetText(Sender: TField; const Text: String); begin Sender.Value:=Text; end; end.
kevinguo
初階會員


發表:1
回覆:31
積分:31
註冊:2002-11-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-14 14:26:22 IP:59.113.xxx.xxx 未訂閱
mother9156:     
    ADOQuery1DSDesigner17: TMemoField;
         ^^^^^^^^^^^^^ 這裡的Fieldname是DSDesigner17 
 
procedure ADOQuery1DSDesigner18GetText(Sender: TField;
var Text: String; DisplayText: Boolean);
procedure ADOQuery1DSDesigner18SetText(Sender: TField;
const Text: String);     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ GetText和 SetText 卻是 DSDesigner18      
kevinguo
初階會員


發表:1
回覆:31
積分:31
註冊:2002-11-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-14 14:40:43 IP:59.113.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=76750 我把範例程式和資料庫上傳了,參考看看 
mother9156
一般會員


發表:1
回覆:4
積分:1
註冊:2004-12-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-14 18:42:54 IP:61.222.xxx.xxx 未訂閱
kevinguo兄,您好: 可以執行了,真不知如何感謝您! 小弟另有一求,能否在編輯時,加上 換行的功能,那就完美了,感恩不盡!
kevinguo
初階會員


發表:1
回覆:31
積分:31
註冊:2002-11-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-14 22:08:07 IP:220.134.xxx.xxx 未訂閱
mother9156您好:    要做到直接在TDBGrid裡編輯有換行功能,我功力不夠,看有沒有其他先進可以指導一下  或是你可以考慮加一個 > < class="code"> procedure TForm1.DBGrid1KeyDown( Sender: TObject; var Key: Word; Shift: TShiftState); begin //按Enter呼叫Memo Form if Key = VK_RETURN then begin if DBGrid1.SelectedField = ADOQuery1DSDesigner17 then with TMemoForm.Create(nil) do try Memo1.Text := ADOQuery1DSDesigner17.AsString; ShowModal; ADOQuery1.Edit; ADOQuery1DSDesigner17.AsString := Memo1.Text; finally Free; end; end; end; 發表人 - kevinguo 於 2005/08/14 22:09:29
mother9156
一般會員


發表:1
回覆:4
積分:1
註冊:2004-12-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-14 23:46:39 IP:61.222.xxx.xxx 未訂閱
kevinguo兄,您好: 其實您的作法已可滿足我的需要, 再次感謝您!
系統時間:2024-06-26 8:06:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!