Hi,
I just created an example of Grid with Combobox from tables. I used 3 arrays for Grid, Source, Display.
I just wrote data retrieve part. Code for saving data to tables can be easily written.
I used some code snippets of one of Grid examples from HMG Sampes.
(Thank you Rathi, for tips about Grid and Combobox)
Please tell me where I can improve the code.
#include "minigui.ch"
Function Main
local aGrid := {}, aSource := {}, aDisp := {}, i
CreateTable()
select item
do while !eof()
aadd(aSource, itemcd)
aadd(aDisp, itemnm)
skip
enddo
select stock
do while !eof()
i = ascan(aSource, {|x| x == stock->itemcd})
aadd(agrid, {i, qty})
skip
enddo
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 400 ;
TITLE 'Grid with Combo Box from Table' ;
MAIN
DEFINE MAIN MENU
DEFINE POPUP 'File'
MENUITEM 'Get Item' ACTION GetItem()
END POPUP
END MENU
@ 10,10 GRID Grid_1 ;
WIDTH 620 ;
HEIGHT 330 ;
HEADERS {'Item','Qty'} ;
WIDTHS {140,140} ;
ITEMS aGrid ;
EDIT ;
COLUMNCONTROLS { {'COMBOBOX', aDisp}, {'TEXTBOX', 'NUMERIC', '999999'}} ;
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
PROCEDURE GETITEM()
local a
a := Form_1.Grid_1.Item (2)
msginfo("Col 1 =>"+str(a[1])+" Col 2 =>"+str(a[2]))
RETURN
FUNCTION CreateTable()
local aDbf := {}
if !file("item.dbf")
aDbf := {}
aadd(adbf, {"itemcd", "c", 10, 0})
aadd(adbf, {"itemnm", "c", 20, 0})
dbcreate("item", adbf)
use item new
select item
append blank
/* as the table name is "item", I can't write codes like item->itemcd := "COMP" ;( it gives error */
replace itemcd with "COMP"
replace itemnm with "Computer"
append blank
replace itemcd with "CD"
replace itemnm with "Compact Disk"
append blank
replace itemcd with "OPM"
replace itemnm with "Optical Mouse"
use
endif
if !file("stock.dbf")
aDbf := {}
aadd(adbf, {"itemcd", "c", 10, 0})
aadd(adbf, {"qty", "n", 6, 0})
dbcreate("stock", adbf)
use stock new
select stock
append blank
stock->itemcd := "OPM"
stock->qty := 100
append blank
stock->itemcd := "COMP"
stock->qty := 20
append blank
stock->itemcd := "CD"
stock->qty := 5000
use
endif
close databases
use item new
use stock new
return nil
Regards.
Sudip
Grid with Combo Box from Table
Moderator: Rathinagiri
Grid with Combo Box from Table
With best regards,
Sudip
Sudip
Re: Grid with Combo Box from Table with SAVE and DELETE
Hi,
I added SAVE and DELETE features in Grid.
Please check this:
#include "minigui.ch"
Function Main
local aGrid := {}, aSource := {}, aDisp := {}, i
CreateTable()
select item
do while !eof()
aadd(aSource, itemcd)
aadd(aDisp, itemnm)
skip
enddo
select stock
do while !eof()
i = ascan(aSource, {|x| x == stock->itemcd})
aadd(agrid, {i, qty})
skip
enddo
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 400 ;
TITLE "Grid with Combobox from Table" ;
MAIN
DEFINE MAIN MENU
DEFINE POPUP 'File'
MENUITEM 'Get Item' ACTION GetItem()
MENUITEM 'Delete Item' ACTION DelItem()
MENUITEM 'Save Data' ACTION SaveData(aSource)
END POPUP
END MENU
@ 10,10 GRID Grid_1 ;
WIDTH 620 ;
HEIGHT 330 ;
HEADERS {'Item','Qty'} ;
WIDTHS {140,140} ;
ITEMS aGrid ;
EDIT ;
COLUMNCONTROLS { {'COMBOBOX', aDisp}, {'TEXTBOX', 'NUMERIC', '999999'}} ;
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
PROCEDURE DelItem()
if msgyesno("Delete Item", "Grid with Combobox from Table")
Form_1.Grid_1.DeleteItem(Form_1.Grid_1.Value)
endif
return
PROCEDURE SaveData(aSource)
local i, aTemp := {}
select stock
zap
for i = 1 to Form_1.Grid_1.Itemcount
aTemp := Form_1.Grid_1.Item(i)
append blank
if aTemp[1] >= 1 .and. aTemp[1] <= len(aSource)
stock->itemcd := aSource[aTemp[1]]
endif
stock->qty := aTemp[2]
next
return nil
PROCEDURE GETITEM()
local a
a := Form_1.Grid_1.Item (2)
msginfo("Col 1 =>"+str(a[1])+" Col 2 =>"+str(a[2]))
RETURN
FUNCTION CreateTable()
local aDbf := {}
if !file("item.dbf")
aDbf := {}
aadd(adbf, {"itemcd", "c", 10, 0})
aadd(adbf, {"itemnm", "c", 20, 0})
dbcreate("item", adbf)
use item new
select item
append blank
replace itemcd with "COMP"
replace itemnm with "Computer"
append blank
replace itemcd with "CD"
replace itemnm with "Compact Disk"
append blank
replace itemcd with "OPM"
replace itemnm with "Optical Mouse"
use
endif
if !file("stock.dbf")
aDbf := {}
aadd(adbf, {"itemcd", "c", 10, 0})
aadd(adbf, {"qty", "n", 6, 0})
dbcreate("stock", adbf)
use stock new
select stock
append blank
stock->itemcd := "OPM"
stock->qty := 100
append blank
stock->itemcd := "COMP"
stock->qty := 20
append blank
stock->itemcd := "CD"
stock->qty := 5000
use
endif
close databases
use item new
use stock new
return nil
Regards.
Sudip
I added SAVE and DELETE features in Grid.
Please check this:
#include "minigui.ch"
Function Main
local aGrid := {}, aSource := {}, aDisp := {}, i
CreateTable()
select item
do while !eof()
aadd(aSource, itemcd)
aadd(aDisp, itemnm)
skip
enddo
select stock
do while !eof()
i = ascan(aSource, {|x| x == stock->itemcd})
aadd(agrid, {i, qty})
skip
enddo
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 400 ;
TITLE "Grid with Combobox from Table" ;
MAIN
DEFINE MAIN MENU
DEFINE POPUP 'File'
MENUITEM 'Get Item' ACTION GetItem()
MENUITEM 'Delete Item' ACTION DelItem()
MENUITEM 'Save Data' ACTION SaveData(aSource)
END POPUP
END MENU
@ 10,10 GRID Grid_1 ;
WIDTH 620 ;
HEIGHT 330 ;
HEADERS {'Item','Qty'} ;
WIDTHS {140,140} ;
ITEMS aGrid ;
EDIT ;
COLUMNCONTROLS { {'COMBOBOX', aDisp}, {'TEXTBOX', 'NUMERIC', '999999'}} ;
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
PROCEDURE DelItem()
if msgyesno("Delete Item", "Grid with Combobox from Table")
Form_1.Grid_1.DeleteItem(Form_1.Grid_1.Value)
endif
return
PROCEDURE SaveData(aSource)
local i, aTemp := {}
select stock
zap
for i = 1 to Form_1.Grid_1.Itemcount
aTemp := Form_1.Grid_1.Item(i)
append blank
if aTemp[1] >= 1 .and. aTemp[1] <= len(aSource)
stock->itemcd := aSource[aTemp[1]]
endif
stock->qty := aTemp[2]
next
return nil
PROCEDURE GETITEM()
local a
a := Form_1.Grid_1.Item (2)
msginfo("Col 1 =>"+str(a[1])+" Col 2 =>"+str(a[2]))
RETURN
FUNCTION CreateTable()
local aDbf := {}
if !file("item.dbf")
aDbf := {}
aadd(adbf, {"itemcd", "c", 10, 0})
aadd(adbf, {"itemnm", "c", 20, 0})
dbcreate("item", adbf)
use item new
select item
append blank
replace itemcd with "COMP"
replace itemnm with "Computer"
append blank
replace itemcd with "CD"
replace itemnm with "Compact Disk"
append blank
replace itemcd with "OPM"
replace itemnm with "Optical Mouse"
use
endif
if !file("stock.dbf")
aDbf := {}
aadd(adbf, {"itemcd", "c", 10, 0})
aadd(adbf, {"qty", "n", 6, 0})
dbcreate("stock", adbf)
use stock new
select stock
append blank
stock->itemcd := "OPM"
stock->qty := 100
append blank
stock->itemcd := "COMP"
stock->qty := 20
append blank
stock->itemcd := "CD"
stock->qty := 5000
use
endif
close databases
use item new
use stock new
return nil
Regards.
Sudip
With best regards,
Sudip
Sudip
- Rathinagiri
- Posts: 5471
- Joined: Tue Jul 29, 2008 6:30 pm
- DBs Used: MariaDB, SQLite, SQLCipher and MySQL
- Location: Sivakasi, India
- Contact:
Re: Grid with Combo Box from Table
Hi,
Can you please attach as a HMG project with sample dbf files too to enable us to run the project?
Can you please attach as a HMG project with sample dbf files too to enable us to run the project?
East or West HMG is the Best.
South or North HMG is worth.
...the possibilities are endless.
South or North HMG is worth.
...the possibilities are endless.
- esgici
- Posts: 4543
- Joined: Wed Jul 30, 2008 9:17 pm
- DBs Used: DBF
- Location: iskenderun / Turkiye
- Contact:
Re: Grid with Combo Box from Table
Hi Sudip
Good work, thanks for sharing
IMHO in programming there is never best; because always there is a better.
No improvement, only my two cents :
Before change
LOCAL aGrid := {}, aSource := {}, aDisp := {}, i
to PRIVATE.
And than your GetItem() procedure :
Happy HMG'ing
Regards
--
Esgici
Good work, thanks for sharing
Improvement is a relative and endless concept. While someones said "if works, don't touch it!" someones said "how I can arrive to the best?"sudip wrote: ... where I can improve the code?
IMHO in programming there is never best; because always there is a better.
No improvement, only my two cents :
Before change
LOCAL aGrid := {}, aSource := {}, aDisp := {}, i
to PRIVATE.
And than your GetItem() procedure :
Code: Select all
PROCEDURE GETITEM()
LOCAL nCurRow, nItemNo
IF Form_1.Grid_1.Value < 1
Form_1.Grid_1.Value := 1
ENDIF
nCurRow := Form_1.Grid_1.Value
nItemNo := Form_1.Grid_1.Cell( nCurRow, 1 )
MsgInfo( "Item No : " + STR( nItemNo, 3 ) + CRLF + ;
"Item Code : " + aSource[ nItemNo ] + CRLF + ;
"Item Name : " + aDisp[ nItemNo ] + CRLF + ;
"Quantity : " + STR( Form_1.Grid_1.Cell( nCurRow, 2 ), 7 ) )
RETURN
Regards
--
Esgici
Viva INTERNATIONAL HMG
Re: Grid with Combo Box from Table
Hi Rathi,
The program file, I sent, will automatically create dbf files. I compiled with compile.bat file. If you need .hpj file I shall create a project and send you.
Thank you very much for your interest.
With best regards.
Sudip
The program file, I sent, will automatically create dbf files. I compiled with compile.bat file. If you need .hpj file I shall create a project and send you.
Thank you very much for your interest.
With best regards.
Sudip
With best regards,
Sudip
Sudip
Re: Grid with Combo Box from Table
Hi Esgici,
Thank you very much for your comments and encouragement. I really need it. And they give me a mental boost up for HMGing
I incorporated all your advice into the program.
Thank you all.
With best regards.
Sudip
Thank you very much for your comments and encouragement. I really need it. And they give me a mental boost up for HMGing
I incorporated all your advice into the program.
Thank you all.
With best regards.
Sudip
With best regards,
Sudip
Sudip
- Rathinagiri
- Posts: 5471
- Joined: Tue Jul 29, 2008 6:30 pm
- DBs Used: MariaDB, SQLite, SQLCipher and MySQL
- Location: Sivakasi, India
- Contact:
Re: Grid with Combo Box from Table
I had checked your code and it works like expected.
Thanks for sharing Sudip.
Thanks for sharing Sudip.
East or West HMG is the Best.
South or North HMG is worth.
...the possibilities are endless.
South or North HMG is worth.
...the possibilities are endless.