KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q132331: PRB: Null Values Disappear When Selected in a Grid or Browse

Article: Q132331
Product(s): Microsoft FoxPro
Version(s): WINDOWS:3.0
Operating System(s): 
Keyword(s): 
Last Modified: 15-FEB-2000

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual FoxPro for Windows, version 3.0 
-------------------------------------------------------------------------------

SYMPTOMS
========

The text string ".NULL." for null values disappears when the field is selected.
When you move out of the field, ".NULL." reappears. This is by design.


RESOLUTION
==========

To display a text string ".NULL." for the currently selected field, create a
column class that displays a label with the text string ".NULL." via the
column's DynamicCurrentControl property. Copy the following code into
TESTNULL.PRG, and then run it. You will see a grid with one column and 10 rows.
Some of the rows contain numeric values, and some contain ".NULL." as a text
string. Press DOWN ARROW to move through the records, note that the text string
value of ".NULL." is displayed when the pointer is on a record that contains a
null value.

    PUBLIC oForm
    oForm = CREATEOBJECT('myform')
    oForm.SHOW

    DEFINE CLASS mytextbox AS textbox
       SpecialEffect = 1
       BorderStyle = 0
       FontBold = .F.

       PROCEDURE keypress
       LPARAMETERS nKeyCode, nShiftAltCtrl

         IF nKeyCode = 48
           REPLACE testnull.name WITH .NULL.
           This.Value = ".NULL."
           NODEFAULT
         ENDIF
       ENDPROC
    ENDDEFINE

    DEFINE CLASS mytextbox1 AS mytextbox
       ControlSource = "testnull.name"
    ENDDEFINE

    DEFINE CLASS mytextbox2 AS mytextbox
       ControlSource = "This.Value"
       Value = ".NULL."

       PROCEDURE gotfocus
          This.Value = ".NULL."
       ENDPROC

       PROCEDURE lostfocus
          IF This.Value <> ".NULL."
             REPLACE testnull.name WITH This.Value
          ENDIF
       ENDPROC
    ENDDEFINE

    DEFINE CLASS mycolumn AS column
       DynamicCurrentControl = "IIF(ISNULL(testnull.name),'text2', 'text1')"
       Sparse = .f.
       Bound = .f.

       ADD OBJECT text1 AS mytextbox1
       ADD OBJECT text2 AS mytextbox2
    ENDDEFINE

    DEFINE CLASS mygrid AS grid
       RecordSource = ALIAS()
       ADD OBJECT c1 AS mycolumn
    ENDDEFINE

    DEFINE CLASS myform AS form
       ADD OBJECT g1 AS mygrid

       PROCEDURE load
          DELETE FILE testnull.dbf
          CREATE TABLE testnull (name c(10) NULL)

          FOR cnt = 1 to 10
            APPEND BLANK
            REPLACE name WITH IIF(MOD(RAND()*100, 2) >=1, SYS(3), .NULL.)
          ENDFOR
          GO TOP
       ENDPROC

       PROCEDURE unload
          CLOSE DATA ALL
       ENDPROC
    ENDDEFINE

STATUS
======

This behavior is by design.

MORE INFORMATION
================

Steps to Reproduce Behavior
---------------------------

To see the behavior described above, run the following code in the Command
window:

     CREATE TABLE test (name C(10) NULL)
     APPEND BLANK
     REPLACE name WITH "Harry"
     APPEND BLANK
     REPLACE name WITH .NULL.
     BROWSE

The currently selected field has no text in it. Press the UP ARROW key or click
in record 1. Record 2 now displays the ".NULL." text string.

Additional query words: VFoxWin browse

======================================================================
Keywords          :  
Technology        : kbVFPsearch kbAudDeveloper kbVFP300
Version           : WINDOWS:3.0

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.