在 Visual FoxPro 的運行時間更新游標時,重新整理的方格不會顯示任何數據

本文提供將 RecordSource 屬性設定為資料指標的方格即使使用 ThisForm.Refresh 或 ThisForm.GridName.Refresh 命令也不會以數據重新整理的問題。

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

徵狀

在 Visual FoxPro 中,如果 RecordSource 方格的 屬性設定為資料指標,然後在運行時間使用 SQL Select Into Cursor CursorName 命令更新該資料指標,即使您使用 ThisForm.Refresh 命令或 ThisForm.GridName.Refresh 命令重新整理數據,網格線也不會顯示任何數據。

原因

當您將 SQL Select 語句執行到方格屬性中指定的相同數據指標時 RecordSource ,必須先終結原始數據指標,才能建立新的數據指標。 發生這種情況時,也會清除網格線數據行和 RecordSource ,然後重新建立。 網格線的記錄來源會設定為新的數據指標,而方格會自動建立數據行。 新的方格從頭開始運作。 因此,它不會從數據指標載入數據。

解決方案

若要在此情況下重新整理網格線,請將方格的 屬性設定 RecordSource 為本身,如下列範例所示:

thisform.grid1.recordsource=thisform.grid1.recordsource

狀態

產生此錯誤是系統刻意為之。

其他相關資訊

如需詳細資訊,請參閱 如果 SELECT-SQL 命令在 Visual FoxPro 中重設數據指標,以數據指標為基礎的方格會是空白的。

重現行為的步驟

  1. 建立表單,然後新增 CUSTOMER。DBF 資料表 (在 \VFP\SAMPLES\DATA 資料環境) 目錄中。

  2. 將下列程式代碼放在表單的 Load 事件中:

    CREATE CURSOR Compdisp (company c(40),city c(15),country c(15))
    
  3. 將下列程式代碼放在表單的 Destroy 事件中:

    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. 執行表單。 在文本框中輸入 France ,然後按下命令按鈕。 方格應該會顯示所有記錄, Customer.Country="France"但不會顯示。 方格是空白的。 THISFROM.GRID1.REFRESH 似乎不會更新網格線。 即使數據指標不是在窗體的Load事件中建立,還是會發生這種情況。

若要讓方格正確顯示資料,請將下列命令放置為 Click 命令按鈕事件的最後一行程式代碼:

ThisForm.Grid1.RecordSource =ThisForm.Grid1.RecordSource