I declrare 6 columns, key Alt+A can be used to add empty row. Then, clicking in first column you can edit 5 columns, but next ENTER key doesn't move focus to column 6.
When I click by the mouse on the column 6, I can ener value, but it causes an error in VALID block which saves data to an array.
Can somebody try to compile my sample?
Code: Select all
#include "hmg.ch"
#define COL_RECNO 7
FUNCTION Main()
public aStru
PUBLIC aData := {}
private abValid := array(6)
private bValid := {|| UpdateData()}
SET LANGUAGE TO POLISH
HB_LANGSELECT('PL')
HB_SETCODEPAGE("PL852")
SET DELETED ON
SET CENTURY ON
SET DATE TO GERMAN
// tablica bloków walidacyjnych
aFill(abValid, bValid)
aStru := {;
{ "NAZWA", "C", 30, 0 },;
{ "UZYTKOWNIK","C", 30, 0 },;
{ "HASLO", "C", 30, 0 },;
{ "SCIEZKA", "C", 80, 0 },;
{ "FIRMA", "C", 50, 0 },;
{ "Link_d", "C",254, 0 } }
scr := ""
if .not.file(scr+"linki.dbf")
DBCREATE( scr+"LINKI.DBF", aStru )
endif
USE (scr+"LINKI.DBF") SHARED alias linki
GO TOP
// Insert data to an array
aData:={}
i=0
DO WHILE !EOF()
AADD(aData, { linki->nazwa, linki->uzytkownik, linki->haslo, linki->sciezka,linki->firma,linki->link_d, linki->(recNo()) })
SKIP
i+=1
ENDDO
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 1500 HEIGHT 800 MAIN ;
TITLE 'Link view/edit - Alt+A adds empty row to grid, try to edit it'
@ 10,10 GRID Grid_1 ;
WIDTH 1400 ;
HEIGHT 700 ;
HEADERS { "NAZWA", "UZYTKOWNIK", "HASLO", "SCIEZKA", "FIRMA","Link długi" } ;
WIDTHS { 200, 200, 200, 300, 200 ,400} ;
ITEMS NIL ;
EDIT ;
VIRTUAL ;
ON QUERYDATA Grid_1_OnQueryData();
JUSTIFY { GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT};
COLUMNVALID abValid
@ 720, 10 BUTTON BT_Save ;
CAPTION 'Zapisz zmiany' ;
WIDTH 120 HEIGHT 28 ;
ACTION SaveDBF()
END WINDOW
ON KEY ALT+Q OF FORM_1 ACTION FORM_1.RELEASE
ON KEY ALT+A OF FORM_1 ACTION AddEmptyRowtoArray()
Form_1.Grid_1.ItemCount := len(aData)
Form_1.CENTER
Form_1.ACTIVATE
RETURN NIL
*----------------------
function Grid_1_OnQueryData
local nRow, nCol
nRow := This.QueryRowIndex
nCol := This.QueryColIndex
if nRow>0 .and. nCol >0
This.QueryData := aData[nRow, nCol]
endif
return
*----------------------
function AddEmptyRowtoArray
local i
local aEmptyRow := {}
for i:=1 to len(aStru)
if aStru[i, 2] == "C"
aAdd(aEmptyRow, "")
elseif aStru[i, 2] == "N"
aAdd(aEmptyRow, 0)
elseif aStru[i, 2] == "L"
aAdd(aEmptyRow, .f.)
elseif aStru[i, 2] == "D"
aAdd(aEmptyRow, 0d0)
endif
next i
// and one another clumn for #recno
aAdd(aEmptyRow, 0)
aAdd(aData, aEmptyRow)
Form_1.Grid_1.ItemCount := len(aData)
Form_1.Grid_1.Value := { len(aData), 1 }
return
*----------------------
FUNCTION UpdateData
local nRow, nCol, xValue
nRow := this.CellRowIndex
nCol := this.CellColIndex
xValue := this.CellValue
MsGDebug("Writing to aData[" + hb_ntos(nRow) + ","+ hb_ntos(nCol)+"]", xValue)
aData[nRow, nCol] := xValue
RETURN .t.
*----------------------
FUNCTION SaveDBF
MsgStop("function in progress...")
RETURN
Code: Select all
Date:08.09.2025 Time: 17:31:26
Error BASE/1132 Błąd zakresu tablicy: Nieprawidłowa liczba argumentów
Called from UPDATEDATA(128)
Called from (b)MAIN(11)
Called from _DOCONTROLEVENTPROCEDURE(6033)
Called from _HMG_GRIDINPLACEEDITOK(1513)
Called from (b)_HMG_GRIDINPLACEEDIT(1066)
Called from _DOCONTROLEVENTPROCEDURE(6033)
Called from EVENTS(821)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5694)
Called from _HMG_GRIDINPLACEEDIT(1299)
Called from _HMG_GRIDINPLACEKBDEDIT(1753)
Called from EVENTS(2213)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5694)
Called from DOMETHOD(9080)
Called from MAIN(81)