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

dbctrlgrid或dbgrid如何知畫面上是那幾筆資料

答題得分者是:Fishman
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-24 15:53:18 IP:122.127.xxx.xxx 訂閱
目的是要用報表印出, 假如我想每頁印出十筆, 我會希望grid上顯示的是該十筆資料, 那要如何得知目前grid畫面上的第一筆和畫面上的最後一筆?
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2007-05-26 18:12:32, 註解 非指整個資料庫,而是dbgrid畫面上的資料顯示‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-25 18:00:52 IP:220.142.xxx.xxx 訂閱
在一開始取值的時候就用變數紀錄下來~
var
first,last:string;


ADO.first;
first:=ADO.FieldByName('欄位').asstring;
ADO.last;
last:=ADO.FieldByName('欄位').asstring;
ADO.first;

------
======================
昏睡~
不昏睡~
不由昏睡~
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-26 18:17:11 IP:220.141.xxx.xxx 訂閱
前輩,您誤解我的意思了, 是指當使用者先按下pgdn,指標指在第廿筆,然後使用者再以上下鍵移動,但此時畫面上顯示的筆數是不會變的,此案可能要用ado物件的page或者clientdataset來解了。
------
努力會更接近成功
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-28 09:27:22 IP:220.142.xxx.xxx 訂閱
相關的問題我以前也問過一次!!

在DBGrid之Mouseup可以如下取得, mouse所點是第幾個row(DBGrid之Row而不是Record no), 不知是否你要的


procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var c:TGridCoord;
begin
c:=DBGrid1.MouseCoord(x,y);
showmessage('row no is' inttostr(c.y));
end;
 


c.x為column no, c.y 為Row no

BY CCCHEN
------
======================
昏睡~
不昏睡~
不由昏睡~
bruce
中階會員


發表:19
回覆:121
積分:83
註冊:2002-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-28 11:38:57 IP:211.21.xxx.xxx 訂閱
若每次只顯示十筆資料,DBGRID裡面就是等於要印的十筆資料,為何還要得知第一筆及末筆資料呢?

===================引 用 pceyes 文 章===================
目的是要用報表印出, 假如我想每頁印出十筆, 我會希望grid上顯示的是該十筆資料, 那要如何得知目前grid畫面上的第一筆和畫面上的最後一筆?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-28 13:26:09 IP:59.124.xxx.xxx 未訂閱
提示:
1.在 DBGrid 上 按下 Ctrl PageUp 可以移到目前 DBGrid 上顯示的第一筆資料上
2.在 DBGrid 上 按下 Ctrl PageDown 可以移到目前 DBGrid 上顯示的最後一筆資料上
如此即可得到目前顯示的資料區間
------
Fishman
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-29 12:29:26 IP:220.141.xxx.xxx 訂閱
Fishman 先生所回的已較接近要求,因為要達到所視即所得的目的, 因此如果先bookmark目前所在筆後再由程式來按cntrl-pgup或cntrl-pgdn分別取得畫面上的第一筆及畫面最後一筆,得再回到原來的目前所在筆,再由報表自該畫面第一筆印至畫面上的最後一筆,即是在下的需求,只是如此程式的行為將很笨,也會很怪。不好意思、表達能力太差,令許多前輩搞不懂在下的問題在那裏。
------
努力會更接近成功
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-29 13:44:44 IP:59.125.xxx.xxx 訂閱
你好

可以試試看,因為顯示在DBGRID上面的資料,如果都是十筆,
那可以用qrSelect.RecNo取得目前的筆數,然後再加工取出該筆數的十筆的第一筆。
EX. qrSelect.RecNo = 16 就可以處理出 11以及20。不知道這樣是不是符合你的需求。
------
Pillar Wang
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-05-29 18:30:47 IP:122.127.xxx.xxx 訂閱
謝謝pillar62 大 大
你的做法,已接近完成了!
但是看了好久才看懂您的例子, (太菜)
表示使用者先按下pgdn又按下donw 6 , qrSelect.RecNo 才會為 16
那請教一下, 如果使用者此時 按下 up 8時,qrSelect.RecNo =9,該筆數的十筆的第一筆應為1以及10
應如何加工取出該筆數的十筆的第一筆及十筆呢?

另unit 要
use qrselect; 嗎?

===================引 用 pillar62 文 章===================
你好

可以試試看,因為顯示在DBGRID上面的資料,如果都是十筆,
那可以用qrSelect.RecNo取得目前的筆數,然後再加工取出該筆數的十筆的第一筆。
EX. qrSelect.RecNo = 16 就可以處理出 11以及20。不知道這樣是不是符合你的需求。
------
努力會更接近成功
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-05-31 15:36:25 IP:59.124.xxx.xxx 未訂閱
<textarea class="vb" rows="10" cols="60" name="code"> .... type TTmpGrid = class(TDBGrid); TForm1 = class(TForm) .... procedure TForm1.Button7Click(Sender: TObject); var x : integer; ST,Ed : Integer; begin with DBGrid1.DataSource.DataSet do begin DisAbleControls; x := TTmpGrid(DBGRid1).Row; MoveBy((x - 1) * -1); ST := DBGrid1.DataSource.DataSet.RecNo;; MoveBy(TTmpGrid(DBGRid1).RowCount - 2); ED := DBGrid1.DataSource.DataSet.RecNo;; MoveBy((TTmpGrid(DBGRid1).RowCount - 1 - x) * -1); EnableControls; ShowMessage(IntToStr(ST) '~' IntToStr(ED)); end; end; </textarea>
------
Fishman
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-06-01 15:13:52 IP:220.141.xxx.xxx 訂閱
可以了!
大大真是超人,令人不得不佩服,原先要放棄了, 想草草結案,但對qrselect一直試不出來,實在不知那是什麼,
無論如何,分數仍要給fishman大大, 謝謝啦!

===================引 用 Fishman 文 章===================
<textarea class="vb" rows="10" cols="60" name="code">.... type TTmpGrid = class(TDBGrid); TForm1 = class(TForm) .... procedure TForm1.Button7Click(Sender: TObject); var x : integer; ST,Ed : Integer; begin with DBGrid1.DataSource.DataSet do ????begin ???? DisAbleControls; ???? x := TTmpGrid(DBGRid1).Row; ???? MoveBy((x - 1) * -1); ???? ST := DBGrid1.DataSource.DataSet.RecNo;; ???? MoveBy(TTmpGrid(DBGRid1).RowCount - 2); ???? ED := DBGrid1.DataSource.DataSet.RecNo;; ???? MoveBy((TTmpGrid(DBGRid1).RowCount - 1 - x) * -1); ???? EnableControls; ???? ShowMessage(IntToStr(ST) '~' IntToStr(ED)); ????end; end; </textarea>
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2007-06-02 21:35:54, 註解 無‧
pceyes 重新編輯於 2007-06-02 21:36:35, 註解 無‧
pceyes 重新編輯於 2007-06-02 21:37:04, 註解 無‧
系統時間:2024-07-03 5:11:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!