Article ID: 147657
Article Last Modified on 6/29/2004
CREATE CLASS fieldSelect AS container OF fselect.vcx
Width: 305
Height: 95
BackColor: 192,192,192
BorderWidth: 0
ncurrentrow
nlines
ColumnCount: 2
BackColor: 192,192,192
DeleteMark: .F.
Height: 97
Left: 53
RecordMark: .F.
RecordSource: crChosen
ScrollBars: 2
Top: -1
Width: 251
FontName: Microsoft Sans Serif
FontSize: 8
FontName: Microsoft Sans Serif
FontSize: 8
Name: TableCombo
FontName: Microsoft Sans Serif
FontSize: 8
BackColor: 192,192,192
RowSourceType: 5
RowSource: THISFORM.aTableList
Name: FieldCombo
FontName: Microsoft Sans Serif
FontSize: 8
BackColor: 192,192,192
RowSourceType: 1
Top: -1
Left: 2
Height: 19
Width: 49
Caption: Add
Enabled: .F.
Top: 22
Left: 2
Height: 19
Width: 49
Caption: Delete
Enabled: .F.
IF THIS.Grid1.ActiveRow <> THIS.nCurrentRow
THIS.Grid1.Tag='Row Changed'
THIS.nCurrentRow=THIS.Grid1.ActiveRow
ENDIF
IF ! EMPTY(Key_Field)
THIS.Command1.Enabled=.T.
ENDIF
CREATE CURSOR crChosen (Table_Name C(12),Key_Field C(100),;
UserExpr L(1),Index N(3))
APPEND BLANK
SELECT crChosen
REPLACE UserExpr WITH .F.
THIS.nCurrentRow=1
THIS.nLines=1
THIS.Grid1.RecordSource='crChosen'
THIS.Grid1.Column1.TableCombo.Requery
THIS.Tag='Same Row'
THIS.RowHeight=25
THIS.Column1.Width=120
THIS.Column2.Width=110
THIS.Column1.CurrentControl='TableCombo'
THIS.Column1.TableCombo.Visible=.T.
THIS.Column1.Header1.Caption='Table Name'
THIS.Column2.CurrentControl='FieldCombo'
THIS.Column2.FieldCombo.Visible=.T.
THIS.Column2.Header1.Caption='Expression'
THIS.PARENT.PARENT.PARENT.CheckChange
IF EMPTY(crChosen.Table_name)
REPLACE crChosen.Table_name WITH THIS.ListItem(1)
THIS.DisplayValue=THIS.ListItem(1)
ENDIF
THIS.PARENT.PARENT.PARENT.CheckChange
IF ! EMPTY(THIS.Value)
IF THIS.PARENT.PARENT.Tag='Same Row'
m.Remember=THIS.ListIndex
ENDIF
ENDIF
* Keep current selection
IF ! EMPTY(THIS.DisplayValue)
THIS.Value = THIS.DisplayValue
ENDIF
m.cChildTab=crChosen.table_name
USE (m.cChildTab) ALIAS ChildTab IN 0
SELECT ChildTab
nCFieldCount=AFIELDS(aDummy)
* Remove existing combo elements
m.nCurCount=THIS.ListCount
FOR i = m.nCurCount TO 1 STEP -1
THIS.RemoveItem(i)
NEXT i
* Add new elements
FOR i = 1 TO nCFieldCount
THIS.AddItem(aDummy[i,1])
NEXT i
* If User-defined expression - add to combo field list
IF crChosen.UserExpr
THIS.AddItem(crChosen.Key_Field)
ENDIF
USE
SELECT crChosen
IF ! EMPTY(THIS.Value)
IF THIS.PARENT.PARENT.Tag='Same Row'
THIS.ListIndex=m.Remember
ELSE
THIS.ListIndex=crChosen.Index
ENDIF
ELSE
THIS.ListIndex=1
REPLACE crChosen.Key_Field WITH THIS.ListItem(THIS.ListIndex)
ENDIF
* Changing Key_Field from User-defined to one off the list
IF THIS.DisplayValue <> crChosen.Key_Field .AND. ;
crChosen.UserExpr = .T.
REPLACE crChosen.UserExpr WITH .F.
ENDIF
REPLACE crChosen.Key_Field WITH THIS.DisplayValue
* User-defined expression ?
IF THIS.ListIndex = 0
THIS.AddItem(THIS.DisplayValue)
REPLACE crChosen.Index WITH THIS.ListCount
REPLACE crChosen.UserExpr WITH .T.
ELSE
IF ! crChosen.UserExpr
REPLACE crChosen.UserExpr WITH .F.
ENDIF
REPLACE crChosen.Index WITH THIS.ListIndex
ENDIF
THIS.PARENT.PARENT.Tag='Same Row'
THIS.PARENT.grid1.ActivateCell(recno(),1)
THIS.PARENT.grid1.column1.tablecombo.setfocus
THISFORM.Refresh
APPEND BLANK
THIS.PARENT.grid1.ActivateCell(reccount(),1)
THIS.PARENT.Grid1.Tag="Row Changed"
THIS.PARENT.Command2.Enabled=.T.
THIS.PARENT.nLines = THIS.PARENT.nLines + 1
DELETE
THIS.PARENT.nLines = THIS.PARENT.nLines - 1
* Disable minus button if 1 line left
IF THIS.PARENT.nLines=1
THIS.Enabled=.F.
ENDIF
THIS.PARENT.grid1.ActivateCell(IIF(recno()>1,recno()-1,1),1)
THISFORM.Refresh
THIS.PARENT.grid1.column1.tablecombo.setfocus
THIS.PARENT.Grid1.Tag="Row Changed"
aTableList[2]
SET DELETED ON SET DEFAU TO sys(2004)+"samples\data" THISFORM.aTableList[1]="customer.dbf" THISFORM.aTableList[2]="orders.dbf"
THIS.FieldSelect1.reeval
Keywords: kbhowto kboop kbcode KB147657