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

如何让dbgrid的第一条直接显示为序号栏位为301的资料?

答題得分者是:小傑克
luowy651
高階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-05 10:34:34 IP:65.49.xxx.xxx 訂閱
比如,我有一个adotable中有1000条资料,我想让dbgrid中的第一条直接显示序号栏位(实体栏位)为301时的状态?

ps: delphi7 mssql2000
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-05 14:19:33 IP:59.115.xxx.xxx 訂閱
這是延續上一個問題的另依一個問題 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-06 06:51:27 IP:59.115.xxx.xxx 訂閱

如果你資料序號會跳號的話, 也可以先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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-06 14:53:47 IP:65.49.xxx.xxx 訂閱
小傑克大大,您好,我测试了一下,不知为何,dbgrid的第一条资料的位置总会相差一条,比如第一条明明应该显示301的,却显示成了302或者300
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-08 21:58:15 IP:61.217.xxx.xxx 訂閱
我只是提供一些想法而已,  沒有完整的程式碼和測試

應該用GetBookmark , moveby , MouseCrood 這幾個組合配合一些創意可以做的出來
------
額有朝天骨,眼中有靈光
系統時間:2024-05-17 7:07:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!