2008-10-17

【Delphi】資料記錄在 DBGrid 的位置

摘要:當資料表尋找一筆記錄且成功後,與此資料表連結的 grid 在顯示該筆記錄時,該筆記錄是位於 grid 的中間列,也許這並不符合我們程式的需求。以下是改變資料記錄在 grid 中顯示位置的方法。

解決方法

我們要借用的就是 MoveBy method。我們要呼叫此 method 二次,第一次是將 grid 向下捲動使原本在 grid 中間的記錄變為在 grid 的第一筆,但這麼一來記錄指標就不是指在原本的記錄上,所以再呼叫第二次 MoveBy 使指標移回原來的記錄。

問題又來了,TDBGrid 並沒有屬性可讓我們知道 grid 有幾列。此時我們若稍稍向下探索 VCL 就會發現 TCustomGridVisibleRowCount 屬性,雖然該屬性為 protected 所以無法讓我們程式中存取。我們可以自訂一個繼承自 TCustomGrid 的類別,再將 TDBGrid 做型別轉換,如此便可存取 VisibleRowCount

以下是程式碼:
 
type
    TMyGrid = class(TCustomGrid);

...
...

procedure TForm1.Button1Click(Sender: TObject);
var
    Distance: integer;
begin
    // 尋找某一筆記錄
    Table1.Locate('Common_Name','Firefish',[]);
    // 找到符合的記錄, 該記錄的位置在 grid 的中間列,
    // 向下捲動 grid, 使目標記錄往上至第一列
    Distance := Table1.MoveBy(TMyGrid(DBGrid).VisibleRowCount-1);
    // 再將資料表指標往回移至原來的記錄
    Table1.MoveBy(-Distance);
end;
 

沒有留言:

張貼留言