一般情况下,应该避免关闭Grid的数据源。你可以在确定了数据源后在打开这个表单。
如果非要这样做,给你一段代码,动态加入自定义类列local cname,ifor i = 1 to datafdn
    ......
    cname = 'Column'+alltrim(str(fdi,4))
    thisform.grid1.AddObject(cname, 'ColumnT')
    
    THISFORM.Grid1.Columns(THISFORM.Grid1.ColumnCount).Visible = .t.
    THISFORM.Grid1.Columns(THISFORM.Grid1.ColumnCount).CurrentControl = 'Text1'
    THISFORM.Grid1.Columns(THISFORM.Grid1.ColumnCount).Name = "Column"+right('000'+alltrim(str(i,3)),3)
    THISFORM.Grid1.Columns(THISFORM.Grid1.ColumnCount).ControlSource = "datamain."+alltrim(thisform.datafda[i,1])
    THISFORM.Grid1.Columns(THISFORM.Grid1.ColumnCount).Header1.Caption = alltrim(thisform.datafda[i,1])
    THISFORM.Grid1.Columns(THISFORM.Grid1.ColumnCount).Header1.BackColor = RGB(0,0,0)
    ......
next....自定义类列:
这段代码放在主程序中。************************************************************************************
DEFINE CLASS ColumnT AS Column
ADD OBJECT header1 AS header WITH ;
Caption = "Header1", ;
Name = "Header1"
ADD OBJECT text1 AS textbox WITH ;
BorderStyle = 0, ;
Margin = 0, ;
ForeColor = RGB(0,0,0), ;
BackColor = RGB(255,255,255), ;
Name = "Text1" PROCEDURE text1.Valid         **** 自定义的事件代码
        ......
return
ENDPROC
ENDDEFINE
************************************************************************************