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

把游标定位到dbgrid中的某个cell上,结果却出现了两个游标

尚未結案
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-12 12:34:42 IP:65.49.xxx.xxx 訂閱
各位大大好,我想把游标定位到dbgrid中当前的某个cell中,当然,直接用mouse点击是没事的,但用code时,虽然游标定位过去了,但却出现了两个游标:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with TStringGrid(DBGrid1) do
  4. begin
  5. Row := 2; // Row - Zeile
  6. Col := 5; // Column - Spalte
  7. SetFocus;
  8. end;
  9. end;
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-18 08:55:36 IP:65.49.xxx.xxx 訂閱
如下图,上面第二条资料与下面倒数第七条资料,有了二个游标

編輯記錄
luowy651 重新編輯於 2009-08-18 08:57:37, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-18 21:12:32 IP:211.72.xxx.xxx 訂閱
DBGrid 的 Row 永遠依 0 (Title), 1 (First Row of Visible), 2 (Second Row of Visible), ...排列,
且 First Row of Visible 不一定等於 DataSet 的 First Row,
故您這寫法並不很妥當, 因 Row 的三角形指標並未跟著移動.

BCB 的 DataSet 不支援 Paradox 以外資料檔或資料庫的 RecNo,
故無法知道 DBGrid 的 First Row of Visible 到底是 DataSet 的那個 Row,
故建議您程式不要如此寫.
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-21 09:29:47 IP:65.49.xxx.xxx 訂閱
请教各位大大:  
这个功能不可以这么写,那一般用什么方法来实现相似的功能呢?
編輯記錄
luowy651 重新編輯於 2009-08-21 09:30:29, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-21 13:02:39 IP:211.72.xxx.xxx 訂閱
不知到您這動作的目的為何, 故無法給您確切的建議!

因不知 DBGrid 的 Visible 的 Row 到底是 DataSet 中的那一筆,
故若要 Focus 到某 Row, 宜用 DataSet 的 Locate() 的方式移動 DataSet 的指標, 而勿用直接指定 Row 的方式.

因 DBGrid 的 Column 是可以被 User 移動的,
故若要 Focus 到某 Column, 宜用 FieldName 的方式指定 Column, 而勿用直接指定 Column 的方式.
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-08-21 14:09:38 IP:65.49.xxx.xxx 訂閱
感谢herbert2大大,我这么做的目的在于,比如某条资料,本来在dbgrid当前的第一条中显示,而执行adotable1.active:=false,true操作后再locate,则可能变成了当前dbgrid中的第8条上显示了,也就是整体位置变了



===================引 用 herbert2 文 章===================
不知到您這動作的目的為何, 故無法給您確切的建議!

因不知 DBGrid 的 Visible 的 Row 到底是 DataSet 中的那一筆,
故若要 Focus 到某 Row, 宜用 DataSet 的 Locate() 的方式移動 DataSet 的指標, 而勿用直接指定 Row 的方式.

因 DBGrid 的 Column 是可以被 User 移動的,
故若要 Focus 到某 Column, 宜用 FieldName 的方式指定 Column, 而勿用直接指定 Column 的方式.
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-08-21 20:03:19 IP:211.72.xxx.xxx 訂閱
既然是多人使用的系統, 關檔再開檔, 當然有可能 Record 的位置會變.

您可於關檔前 Keep Primary Key 值於變數, 再於開檔後以該變數值 Locate 該筆 Record.

但要注意, 可能該 Record 的 Key 值被他人改了或該 Record 已被 Delete 掉, 則會 Locate 不到.
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-08-24 14:41:53 IP:65.49.xxx.xxx 訂閱
好象还是不行,每次游标都会把资料自动移到dbgrid的中间行位置去
編輯記錄
luowy651 重新編輯於 2009-08-24 14:42:25, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-08-24 22:32:36 IP:211.72.xxx.xxx 訂閱
您的意思是:因為 DataSet 一 Open,Light Bar 自動 Show 在 DBGrid 的第 N Row (N > 1) 而非 1st Row,
所以您才要執行移動 Focus Cell 的動作嗎?
若是如此,有點兒奇怪。小弟用 BCB5 的 TQuery 或 TTable 搭配 TDBGrid, 從未有此異常。
您可能要檢查您的 Code,該 DataSet Open 後到底做了那些動作?
系統時間:2024-04-20 22:03:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!