mkyx Posted October 30, 2020 Report Share Posted October 30, 2020 Bom dia, tenho um tabela feito com xbrowse usando array. Eu preciso deixar editável a coluna de quantidade, fiz conforme abaixo, mas não grava na tabela as alterações Alguém o por quê? tab_item_1:={{"","","",0,0,0,"",0,0,0,0,"",0,"","",0,0,""}} oBrw0:=TXBrowse():New( oWnd ) oBrw0:nTop:=_l0*IF(IMP_CC="@",65,125)/768 oBrw0:nLeft:=15 oBrw0:nBottom:=_l0*IF(IMP_CC="@",500,555)/768 oBrw0:nRight:=if(_c0<=1600,640,950) oBrw0:nMarqueeStyle := MARQSTYLE_HIGHLCELL oBrw0:setArray(tab_item_1) oBrw0:nColDividerStyle := 0 oBrw0:nRowDividerStyle := 0 oBrw0:nHeaderLines := 1 //--> Cabecalho em 2 Linhas. oBrw0:lAllowColSwapping :=.F. // Trocar Colunas oBrw0:lAllowRowSizing := .F. //--> Nao move as Linhas oBrw0:nRowHeight := 25 //--> Altura das Linhas do ListBox. oBrw0:lHScroll := .F. oBrw0:lVScroll := .F. oBrw0:lHeader := .T. oBrw0:lFooter := .F. oBrw0:lRecordSelector := .F. oBrw0:l2007:=.T. oBrw0:bClrStd := {|| IF(TAB_ITEM_1[oBrw0:nArrayAT,1]="D",{CLR_WHITE,CLR_RED},{CLR_BLUE,CLR_WHITE}) } oBrw0:lFooter := .F. if _c0<=1600 oBrw0:oFont := OFNT44 else oBrw0:oFont := OFNT441 endif oBrw0:aCols[1]:cHeader := "?" oBrw0:aCols[1]:nWidth := 20 oBrw0:aCols[1]:nHeadStrAlign := AL_CENTER oBrw0:aCols[1]:nDataStrAlign := AL_CENTER oBrw0:aCols[2]:cHeader := "CÓDIGO" oBrw0:aCols[2]:nWidth := 60 oBrw0:aCols[2]:nHeadStrAlign := AL_LEFT oBrw0:aCols[2]:nDataStrAlign := AL_LEFT oBrw0:aCols[3]:cHeader := "DESCRIÇÃO" oBrw0:aCols[3]:nWidth := 295 oBrw0:aCols[3]:nHeadStrAlign := AL_LEFT oBrw0:aCols[3]:nDataStrAlign := AL_LEFT Somente essa coluna é editável, coluna 4 oBrw0:aCols[4]:cHeader := "QUANTID" oBrw0:aCols[4]:nWidth := 70 oBrw0:aCols[4]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[4]:nDataStrAlign := AL_RIGHT oBrw0:aCols[4]:bStrData := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,4]>0,IF(INT(TAB_ITEM_1[oBrw0:nArrayAT,4])=TAB_ITEM_1[oBrw0:nArrayAT,4],TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,4] , '@E 999,999'),TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,4] , '@E 999,999.999')),"") } oBrw0:aCols[4]:nEditType := 1 oBrw0:aCols[4]:CEDITPICTURE :="@E 999999.999" oBrw0:aCols[4]:bOnPostEdit := {|o,x|FieldPut( tab_item_1[oBrw0:nArrayAT ,4 ] , x) } // não funciona oBrw0:aCols[5]:cHeader := "VALOR" oBrw0:aCols[5]:nWidth := 70 oBrw0:aCols[5]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[5]:nDataStrAlign := AL_RIGHT oBrw0:aCols[5]:bStrData := {|| IF(TAB_ITEM_1[oBrw0:nArrayAT,5]>0,TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,5] , '@E 999,999.99'),"") } oBrw0:aCols[6]:cHeader := "TOTAL" oBrw0:aCols[6]:nWidth := 100 oBrw0:aCols[6]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[6]:nDataStrAlign := AL_RIGHT oBrw0:aCols[6]:bStrData := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,6]>0, TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,6] , '@E 999,999.99'),"") } oBrw0:bClrSel := {|| {RGB(0,0,128),RGB(255,255,255)} } // COR SELECIONADA QUANDO SAI DE FOCO oBrw0:CreateFromCode() oBrw0:bKeydown:={|nkey|_obrw0(nkey,OBRW0:nArrayAt)} Quote Link to comment Share on other sites More sharing options...
aferra Posted October 30, 2020 Report Share Posted October 30, 2020 Tente assimoBrw0:aCols[4]:bOnPostEdit := {|o,x| tab_item_1[oBrw0:nArrayAT ,4 ] := x } Quote Link to comment Share on other sites More sharing options...
mkyx Posted October 30, 2020 Author Report Share Posted October 30, 2020 Boa tarde, Já tinha feito dessa maneira aí, indicado pelo aferra, mas, fui tentar de novo, e nada só permite a digitação do número, quando se dá enter, não corrige o campo. Quote Link to comment Share on other sites More sharing options...
mkyx Posted November 1, 2020 Author Report Share Posted November 1, 2020 Resolvido, assim: Coloquei um SYSWAIT(0.1) dentro do método PostEdit do xbrowse: METHOD PostEdit( xValue, lButton ) CLASS TXBrwColumn local lGoNext := .f.,X If ::lOnPostEdit return nil Endif ::lOnPostEdit := .t. DEFAULT lButton := .f. do case case ::nEditType == EDIT_GET if ::oEditGet != nil SYSWAIT(0.1) // <----------------só com essa pausa que funcionou. OBS: pra trabalhar com bancos de dados está normal, não precisa do syswait X:=Eval( ::bOnPostEdit, Self, Eval( ::oEditGet:bSetGet ), ::oEditGet:nLastKey ) lGoNext := ( ::oEditGet:nLastKey == VK_RETURN ) ::oEditGet:End() ::oEditGet := nil endif Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.