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

請問如何在DBGrid內作資料異動~

尚未結案
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-18 09:17:54 IP:61.221.xxx.xxx 未訂閱
請問各位~    目前我的畫面上有個DBGrid~ 當使用者直接在DBGrid修改下圖這兩個紅色框框時~ 我希望可以控管使用者所填入的值一律為兩個數字(字串型態)~ 如使用者填入如4時~不論畫面或者存入值需為[04] 請問我該在那裡去作設定呢~    謝謝~
meta
中階會員


發表:3
回覆:60
積分:57
註冊:2004-06-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-18 10:50:00 IP:202.39.xxx.xxx 未訂閱
請參考Fishman大文章 http://delphi.ktop.com.tw/topic.php?topic_id=43708    
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-18 12:00:26 IP:61.221.xxx.xxx 未訂閱
Hi meta~ 謝謝您~ 終於有個方向~ 但是我依然有兩個問題~ (1)以下~如何是字串型態~ format該如何去設定~ Text:= formatfloat('0.00',query1.fieldbyname('sale_num').AsInteger); (2)Fishman 所提供的方法~ 此段~就你要的欄位設定 Display Format 為 0.00 因為我只找到EditMark~ 定義~ 00;1;_ 好像也是不行的~ 我那裡有設錯嗎~ 謝謝~
meta
中階會員


發表:3
回覆:60
積分:57
註冊:2004-06-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-18 14:58:45 IP:202.39.xxx.xxx 未訂閱
//參考Fishman大文章.. http://delphi.ktop.com.tw/topic.php?topic_id=43708 「不過先決條件是該欄位 type 為數字(Integer,Float,Word...皆可)」.. 因為欄位格式不同,所以無法使用..    //這是自己試的,D7下ok!
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  AdoDataSet1.Edit;
  if Field.DisplayName='test' then
    if (Length(Field.Text)<2) and(Field.Text<>'') then
    begin
      Field.Text:='0' Field.Text;
      AdoDataSet1.Post;
    end;
end;
//應該有更好的方法..再想想.研究一下..
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-18 15:33:02 IP:210.65.xxx.xxx 未訂閱
Hi All,    Sorry !! 插一下花    假設該欄位型態為 String 則可以這樣:    1. uses StrUtils 然後在該 Field 的 OnGetText Event 加入以下程式碼    procedure TForm1.ClientDataSet1sGetText(Sender: TField; var Text: String;   DisplayText: Boolean); begin   Text := RightStr('00' + TField(Sender).AsString,2); end;    2. 設定該欄位的 EditMask 為 00;1;_(EditMask 僅對 TStringField 有用,TFloatField、TIntegerField 等數字型態欄位並無該項設定) ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
meta
中階會員


發表:3
回覆:60
積分:57
註冊:2004-06-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-19 13:33:47 IP:61.229.xxx.xxx 未訂閱
//thx to Fishman大.. 1.方法ok. 2.好像不能在第一個位置補'0'哩..(欄位型態=TWideStringField)    // 1.填入的值一律為兩個數字 設該Fields.size=2 2.存入DB部分要自己改寫一下才會正確存入     //多多指教..多多指教
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-22 10:25:51 IP:61.221.xxx.xxx 未訂閱
Hi Fishman /meta~    謝謝你們所提供方法~最後我是利用ADOQuery2DSDesigner7GetText處理    procedure TForm1.ADOQuery2DSDesigner7GetText(Sender: TField;   var Text: String; DisplayText: Boolean); begin   if ADOQuery2.Eof <> true then   begin     Text := formatfloat('00',Strtoint(Trim(ADOQuery2.fieldbyname('充填起始番號').AsString))); end; end; 但是奇怪吶~為什麼修改某一記錄時~ 卻要修改資料結束時~ 指標再指至下一筆才可以真正在存入值的動作呢~ 謝謝你們~ 麻煩大家
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-22 12:29:23 IP:210.65.xxx.xxx 未訂閱
Hi t0288542,
DataSet 特性即是如此,方可減少不斷更新資料庫問題,否則同一筆資料10個欄位,輸入時豈不是得更新10次?    若有必要可於 DBGrid 的 OnColExit 事件加入一些程式碼自行 Post    procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  if TDBGrid(Sender).DataSource.DataSet.State in [dsInsert,dsEdit] then
    TDBGrid(Sender).DataSource.DataSet.Post;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-02-22 13:07:58 IP:61.221.xxx.xxx 未訂閱
謝謝~ meta和Fishman幫忙~ ^_______^
系統時間:2024-11-23 5:06:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!