共用方式為


當在 Visual FoxPro 中執行時,若游標在運行時間更新,更新的網格不會顯示任何數據。

這篇文章提供了解決方案,針對具有將 RecordSource 屬性設置為游標的網格,即使使用 ThisForm.Refresh 或 ThisForm.GridName.Refresh 命令,數據也不會刷新的問題。

原始產品版本: Visual FoxPro
原始 KB 編號: 131836

癥狀

在 Visual FoxPro 中,如果將網格的 RecordSource 屬性設定為游標,然後在執行時使用 SQL Select Into Cursor CursorName 命令更新該游標,即使使用 ThisForm.RefreshThisForm.GridName.Refresh 命令刷新,網格也不會顯示任何數據。

原因

當您在網格的RecordSource屬性中執行 SQL Select 語句到相同的遊標時,必須先銷毀原始遊標才能創建新的遊標。 發生這種情況時,也會清除方格欄位和 RecordSource ,然後重新建立。 網格的記錄來源設置為新游標,網格會自動創建欄位。 全新的系統從頭開始運作。 因此,它不會從游標載入數據。

解析度

在這種情況下,要刷新網格,將網格的 RecordSource 屬性設置為自身,如這個例子所示:

thisform.grid1.recordsource=thisform.grid1.recordsource

地位

這種行為是設計使然。

更多資訊

如需詳細資訊,請參閱 如果 SELECT-SQL 命令在 Visual FoxPro 中重設游標,則以游標為基礎的網格將為空白

重現此行為的步驟

  1. 創建一個表單,然後將 CUSTOMER.DBF 資料表(位於 \VFP\SAMPLES\DATA 目錄中)新增至資料環境。

  2. 將以下代碼放在表單的載入事件中:

    CREATE CURSOR Compdisp (company c(40),city c(15),country c(15))
    
  3. 將以下程式碼放入表單的銷毀事件中:

    SELECT Compdisp
    USE
    
  4. 在表單上建立一個網格,並為該網格設置以下屬性。

    ColumnCount=3
    RecordSourceType=Alias
    RecordSource=Compdisp
    
  5. 將文字框新增至表單。

  6. 在其Click事件中添加一個帶有以下代碼的命令按鈕:

    SELECT company,city,country;
    FROM customer;
    WHERE customer.country=thisform.text1.value;
    INTO CURSOR Compdisp
    THISFORM.GRID1.REFRESH
    
  7. 執行表單。 在文字框中輸入法國,然後點擊命令按鈕。 網格應顯示所有符合 Customer.Country="France" 的記錄,但它沒有。 網格是空的。 THISFROM.GRID1.REFRESH 似乎没有更新网格。 即使在「表單」的載入事件中未建立游標,也會發生此情況。

為了讓網格正確顯示數據,請將以下命令放在命令按鈕Click事件的程式碼的最後一行。

ThisForm.Grid1.RecordSource =ThisForm.Grid1.RecordSource