請問如何判斷在StringGrid中換列了,以及某欄設為不能輸入模式 |
答題得分者是:ccchen
|
littlefactor
一般會員 發表:24 回覆:25 積分:9 註冊:2002-07-11 發送簡訊給我 |
請教各位高手,我想利用StringGrid作輸入進貨單,輸完完畢後再儲存到進貨主檔和進貨明細檔,
http://delphi.ktop.com.tw/loadfile.php?TOPICID=7179607&CC=160573 現在我遇到的問題是: 1.指定某欄設為不能輸入模式:我設計在輸入印刷品編號後,按Enter後會帶出印刷品名稱和單位,所以說這兩欄我希望可以不能輸入,只能藉確認印刷品編號後,帶出值來,可是我找不到適合的屬性可以去設定,StringGrid只能針對整個去作GoEditing的設定..想問大家有沒有其他方法呢? 2.判斷換列:為了作欄位輸入的確認,我需要在換列時觸發檢查欄位事件,我的構想是在換列(A to B)時,檢查A列有沒有填滿值,如果沒有就跳回A列,有,就讓他跳到B列,按儲存時再跑它有幾列是填好值,再去跑迴圈一個Cell一個Cell去存入table
我之前有搜尋過相關的文章,hager先生在"程式設計俱樂部"裡提過
『利用 TStringGrid 的 OnSelectCell 事件,不過您得用個全域變數記錄之前的 Col, Row 值為何,若 Row 的值有異的話, 就是有上下移動了』
當我利用以下程式try時(piror_row,now_row 已宣告成全區變數)
piror_row:= now_row ;
now_row:= StringGridA_1.Row;
showmessage('之前的列' IntToStr( piror_row));
showmessage('現在的列' IntToStr( now_row));
會產生以下的結果,EX:A To B,再 B To C ,當游標在C列時它秀的會是之前的列是A,現在的列是B..恩,理解我的意思嗎??
所以說 > 救倫唷~~請各位指點迷津吧~~
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
我覺得你的問題如果改用TClientDataSet加DBGrid來做會輕鬆很多
希望編輯時不與資料庫連接之方式, 在Delphi3以前可能須用StringGrid, 現在其實應該不必了 試試看應比StringGrid好多了
1. 在form上放一個ClientdataSet->Double Click此clientDataSet->Right Click->選new Field-> 輸入fieldname等,RadioGroup上勾選Data Field
逐一完成各field定義
2. 加上DataSource, DBGrid, 連上彼此關係 3. FormCreate時(或其他合適之時機)ClientDataSet1.createDataset; 4. 你可以設Field之ReadOnly指定某欄設為不能輸入模式 5. 在FieldValidate執行你要的換列功能
|
littlefactor
一般會員 發表:24 回覆:25 積分:9 註冊:2002-07-11 發送簡訊給我 |
ccchen先生您好:
首先謝謝您回答問題,我試著以您提的方式去做,有以下疑問想再請教您~
1.一張進貨單,分別存在 主檔:進貨單號,供應商代碼,進貨日期
明細檔:進貨單號,項次,印刷品代碼1,印刷品代碼2,單價,數量
我之前的做法是存的時候,除了跑迴圈把StringGrid一行一行的值去存入table外還會在迴圈中存入進貨單號進明細檔,檔案就能順利存入,
如果使用您建議的方法話,在DBGrid中key什麼,在applyupdate時就會存入什麼,但是在keyr進貨明細的DBGrid,總不能要使用者自己key編號吧,那在存入明細檔要如何不讓使用者key 進貨單號,便能自動存入呢??
就想說設master-detail的關聯看看,就只是將明細檔的mastersource 和masterfields設好在我createDataset時會出現以下error,想在請問使用clientdataset時要設master-detail關聯時要使用3 tier的做法??因為我這支程式是2 tier
麻煩您呢~
http://delphi.ktop.com.tw/loadfile.php?TOPICID=7190875&CC=160825 發表人 - littlefactor 於 2002/11/17 21:24:47
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
1. 你有些誤會了, 我原意是保持你原來之程式架構,ClientDataset不連資料庫,也永遠不applyupdate, 只是讓你將編輯中之data保存在memory中, 就如同你的StringGrid. 編輯完後用一個while loop(如同你原來之迴圈)逐筆寫入 2. 當然你也可以直接連資料庫, 在applyupdate時自動寫入
Detail之"進貨單號", 可在onNewRecord時填入, 在Detail中可將此欄位之visible設為False, 或在DBGrid上Right Click將想讓user看到之欄位才加入DBGrid之column中, 如此未加入之欄位, User就看不到 3.想在請問使用clientdataset時要設master-detail關聯時要使用3 tier的做法
與3Tier無關, 倒是設master-detail關聯時先在query上設好再經由provider給ClientDataSet
不過以我自己而言重不做Master-Detail之關聯, 都是自己控制
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |