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

如何在cxGrid中檢查新輸入的值是否重覆?

缺席
daniel710624
一般會員


發表:11
回覆:13
積分:4
註冊:2003-04-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-24 16:18:24 IP:210.201.xxx.xxx 訂閱
大家好!
不知是否有人熟悉DevExpress的cxGrid元件? 可否指教如何在輸入資料的時候, 檢查資料是否重覆?
因為一次可輸入多筆資料, 再批次Update回資料庫(SQL2000)的關係, 在輸入資料的同時, 要檢查同一批資料是否重覆. 以前使用DBGrid很單純, 好像用Lookup就可做到, 而且不會因為執行Lookup, 使得Cursor亂跑, 影响使用者輸入動作!
後來改用cxGrid, 用相同的方法卻行不通, 可否請各位指導一下? 謝謝!
riceball
一般會員


發表:0
回覆:2
積分:0
註冊:2002-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-24 21:25:44 IP:222.183.xxx.xxx 未訂閱
表述不清,不過,你可以使用 cxGrid字段的 OnValidate 事件進行判斷。

procedure tvSampEditValidate(Sender: TObject; var DisplayValue: TcxEditValue; var ErrorText: TCaption; var Error: Boolean);
begin
if IsDup(DisplayValue) then
begin
Error := True;
end;
end;
daniel710624
一般會員


發表:11
回覆:13
積分:4
註冊:2003-04-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-27 12:18:28 IP:210.201.xxx.xxx 訂閱
您好!
感謝您的解答!
我已將更詳細的內容發表在以下網址:
http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=85383
如果在cxGrid字段的 OnValidate 實作, 該如何將輸入的資料與每一筆比對?
謝教cxGrid有類似TQuery.Lookup的Method嗎?
再次感謝您的協助!
riceball
一般會員


發表:0
回覆:2
積分:0
註冊:2002-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-11-30 18:39:08 IP:222.183.xxx.xxx 未訂閱
巨汗!這個實現的方法太多了,比如用一個臨時query進行判斷:


procedure tvTrademarkEditValidate(Sender: TObject; var DisplayValue: TcxEditValue; var ErrorText: TCaption; var Error: Boolean);
var
vIsDuplicated: Boolean;
begin
qryTemp.SQL.Text := 'select id from Cars where Trademark='
DisplayValue;
qryTemp.Open;
vIsDuplicated := not qryTemp.EoF;
qryTemp.Close;
if vIsDuplicated then
begin
Error := True;
end;
end;
daniel710624
一般會員


發表:11
回覆:13
積分:4
註冊:2003-04-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-07 18:22:51 IP:210.201.xxx.xxx 訂閱
因為 User 可以一次輸入很多筆資料, 再用Catched Update 的方式儲存資料回數據庫! 在輸入的時候, 就必需檢查是否重覆了!
您的方法可能無法採用! 不過, 仍感謝您的協助! 不知您是否有其他方法?
daniel710624
一般會員


發表:11
回覆:13
積分:4
註冊:2003-04-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-12-05 10:39:41 IP:210.201.xxx.xxx 訂閱
我研究出一個方法, 可在cxDBGrid中判斷輸入的資料是否重覆. 雖然這個方法很土,但至少目前解決了我的問題.
不知是否有更好的方法?請各位前輩賜教!

[code delphi]
//檢查Key值欄位在新增資料時,是否重覆
//參數:
// iKeyCol: word -> Key值欄位在Grid中的Index
// aMyField: TField -> 要進行檢查的欄位
procedure TFormBxGridEntry1.CheckKeyDup(iKeyCol: word; aMyField: TField);
var
i, x: Integer;
begin
x := cxGridMasterView1.DataController.FocusedRowIndex; //記錄目前正在新增的資料是Grid中的第幾筆
for i := 0 to cxGridMasterView1.ViewData.RowCount - 1 do //利用迴圈處理Grid中每一筆資料
begin
if cxGridMasterView1.ViewData.Rows[i].Index = x then Continue; //迴避正在新增的資料,不作比對

//將aMyField與Key值欄位比對
if Trim(cxGridMasterView1.ViewData.Rows[i].Values[iKeyCol]) = Trim(aMyField.AsString) then
begin
RepeatWarning(aMyField.DisplayLabel); //資料重覆的警告
cxGridMasterView1.Controller.FocusedItemIndex := iKeyCol; //將Grid Cursor指回正在新增的那一筆資料
Abort;
end;
end;
end;
[/code]
系統時間:2024-05-07 10:44:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!