2010-02-22 21 views

Trả lời

14

Bạn đã cố gắng sử dụng Disable- & EnableControls?

DataSet.DisableControls; 
try 
    DataSet.Close; 
    DataSet.Open; 
finally 
    DataSet.EnableControls; 
end; 

Hơn nữa, bạn chỉ có thể gọi DataSet.Refresh thay vì đóng và mở để nhận kết quả tương tự.

+0

Lời khuyên tốt! Tôi đã quên điều đó. –

0

tôi sử dụng này trong ứng dụng của tôi

DataSet.MergeChangeLog; 
DataSet.ApplyUpdates(-1); 
DataSet.Refresh; 

Đoạn mã trên là trong một action tên actRefreshData, trong ActionManager

Khi tôi cần phải sử dụng tôi chỉ gọi nó như

actRefreshData.Execute; 

Hy vọng điều này sẽ hữu ích.

Gợi ý: bạn có thể thêm một Timer và tự động

0

Look này ở đây:

type THackDataSet=class(TDataSet); // a nice "hack" so we can access 
//protected members 
THackDBGrid=class(TDBGrid); 

procedure {tdmdb.}refreshgrid(grid : tdbgrid); 

var row, recno : integer; 
    ds : tdataset; 
    b : tbookmark; 
begin 
    Row := THackDBGrid(grid).Row;// or THackDataSet(ds).ActiveRecord 

    ds := grid.datasource.dataset; 

    RecNo := ds.RecNo; 

    b := ds.GetBookmark; 

    try 
    ds.close; 
    ds.Open; 
    finally 
    if (b<>nil) and ds.BookMarkValid(b) then 
    try 
    //  ds.GotoBookMark(b); 
     ds.CheckBrowseMode; 
     THackDataSet(ds).DoBeforeScroll; 
     THackDataSet(ds).InternalGotoBookmark(b); 
     if THackDataSet(ds).ActiveRecord <> Row - 1 then 
     THackDataSet(ds).MoveBy(Row - THackDataSet(ds).ActiveRecord - 1); 
     ds.Resync([rmExact{, rmCenter}]); 
     THackDataSet(ds).DoAfterScroll; 
    finally 
     ds.FreeBookMark(b); 
    end 
    else if (recno<ds.RecordCount) and (recno<>ds.RecNo) then 
    begin 
     ds.First; 
     ds.MoveBy(Max(0, recno-1)); 
    end; 
    end; 
end; 
Các vấn đề liên quan