2008-10-17

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

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

解決方法

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

問題又來了,TDBGrid 並沒有屬性可讓我們知道 grid 有幾列。此時我們若稍稍向下探索 VCL 就會發現 TCustomGrid 有 VisibleRowCount 屬性,雖然該屬性為 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;
 

沒有留言:

張貼留言