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

請問如何判斷在StringGrid中換列了,以及某欄設為不能輸入模式

答題得分者是:ccchen
littlefactor
一般會員


發表:24
回覆:25
積分:9
註冊:2002-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-15 15:19:32 IP:61.56.xxx.xxx 未訂閱
請教各位高手,我想利用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-15 15:58:59 IP:61.219.xxx.xxx 未訂閱
我覺得你的問題如果改用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-17 21:20:36 IP:61.56.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-18 08:11:18 IP:61.219.xxx.xxx 未訂閱
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之關聯, 都是自己控制
系統時間:2024-11-24 17:58:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!