如何让dbgrid的第一条直接显示为序号栏位为301的资料? |
答題得分者是:小傑克
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
這是延續上一個問題的另依一個問題 QQ
我試了一下,這樣寫應該是你要的狀況, [code delphi] var Form1: TForm1; oldX,oldY,deffCount:integer; p:Pointer; implementation {$R *.dfm} procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin oldX := X; oldY := Y; end; procedure TForm1.DBGrid1CellClick(Column: TColumn); begin //利用點選的時候紀錄最後那一筆的位置 p := ADOTable1.GetBookmark; // 這個12是因為我dbgrid 一頁顯示23條, 我要抓游標離中間位置差幾行 // 如果總共22行就用11 deffCount := (DBGrid1.MouseCoord(oldX,oldY).Y) - 12 ; end; procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin // 這個 function 模擬測試選到剛剛最後那一筆 ADOTable1.Close; ADOTable1.Open; // 用GotoBookmark 先滾到最後選的那筆 ADOTable1.GotoBookmark(p); // 但是這樣還有問題,因為GotoBookmark會把那筆放到grid的中間 // 下面的動作就是想辦法把整個資料顯示往上或往下滾幾筆,滾到跟剛剛同樣位置 for i := 0 to Integer( ABS(deffCount)) do begin if deffCount < 0 then ADOTable1.Next else ADOTable1.Prior; end; p := ADOTable1.GetBookmark; ADOTable1.GotoBookmark(p); for i := 0 to Integer( ABS(deffCount)) do begin if deffCount > 0 then ADOTable1.Next else ADOTable1.Prior; end; end; [/code]
------
額有朝天骨,眼中有靈光 |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
如果你資料序號會跳號的話, 也可以先locate 到301 然後再呼叫 procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i := DBGrid1.MouseCoord( 1, DBGrid1.ClientRect.Bottom -DBGrid1.Canvas.TextHeight('A') ).Y ; // 取出grid中有幾列 ADOTable1.MoveBy( i - 1 ); end; ===================引 用 luowy651 文 章=================== 比如,我有一个adotable中有1000条资料,我想让dbgrid中的第一条直接显示序号栏位(实体栏位)为301时的状态? ps: delphi7 mssql2000
------
額有朝天骨,眼中有靈光 |
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |