Página 1 de 1

Alimentando um combobox

Enviado: 30 Out 2011 21:58
por marcos.gurupi
Alguem consegue ver o que tem de errado na rotina/funcao abaixo?

Código: Selecionar todos

Static Function AlimentaCombobox(Area,ordem,Var,Obj)

Local Areant:=Select()
Local aitems:={}
select(Area)
ordsetfocus(Ordem)
dbgotop()
DO WHILE !EOF()
   If Area=1
      aadd(aItems,NoMesa)
   Else
      aadd(aItems,Descricao)
   Endif   
   DBSKIP()
ENDDO
Obj:aItems:=aItems
Select(Areant)
RETURN iif(Area=1,iNoMesa,iHistorico)

Uso com sucesso em outro aplicativo, mas aqui o combobox estah ficando vazio.

Marcos Roberto.

Alimentando um combobox

Enviado: 30 Out 2011 22:03
por Pablo César
Ao final da inclusão faltaria um refresh ?

Alimentando um combobox

Enviado: 30 Out 2011 22:06
por alxsts
Olá!

O fragmento de código não dá uma visão ampla. Não sabemos que tipo de variáveis você usa. Se forem Private, ou se obj for passado por referência, a variável obj:aItens estará carregada. Senão, o retorno da função está esquisito. Retorna duas variáveis que não são tratadas na função.

Alimentando um combobox

Enviado: 30 Out 2011 22:17
por marcos.gurupi
Fiz as alteracoes sugeridas mas ainda o combobox estah retornando vazio. Segue abaixo o codigo mais completo.

Código: Selecionar todos


Private  vNoMesa := 1, vGarcom := 1, vQtdPes := 1,iNoMesa:={},iGarcom:={}
Private  oNoMesa,oLabel1, oGarcom, oLabel2, oQtdPes, oLabel3, oAbrirMesa



   @  14,45 GET COMBOBOX oNoMesa VAR vNoMesa  ITEMS iNoMesa ON INIT {||AlimentaCombobox(1,1,iNoMesa,oNoMesa)} SIZE 110,23   
   @ 145,45 GET COMBOBOX oGarcom VAR vGarcom  ITEMS iGarcom SIZE 155,23   
   @ 320,45 GET UPDOWN   oQtdPes VAR vQtdPes RANGE -9999,9999  INCREMENT 1 SIZE 80,22 STYLE WS_BORDER+ES_RIGHT   

   @ 429,44 BUTTON oAbrirMesa CAPTION "Abrir Mesa" ON CLICK {||LancarConsumo()}  SIZE 136,24 STYLE WS_TABSTOP  
   ACTIVATE DIALOG oAberMesa 

RETURN oAberMesa:lresult


Static Function AlimentaCombobox(Area,ordem,var,Obj)

Local Areant:=Select()
Local aItems:={}
select(Area)
ordsetfocus(Ordem)
dbgotop()
DO WHILE !EOF()
   If Alltrim(Situacao)="FECHADA".OR.EMPTY(SITUACAO)
 		aadd(aItems,StrZero(NoMesa,2))
  	Endif	
   DBSKIP()
ENDDO
Obj:aItems:=aItems
Select(Areant)
RETURN aItems

Marcos Roberto.

Alimentando um combobox

Enviado: 30 Out 2011 22:28
por marcos.gurupi
Eu fiz assim:

Código: Selecionar todos

MsgInfo(Str(Len(aItems),2))
E o array estah com os valores carregados, entaum eles nao estaum aparecendo no combobox.

Marcos Roberto.

Alimentando um combobox

Enviado: 30 Out 2011 22:34
por alxsts
Marcos,

não é muito a minha praia mas, você não deveria carregar os itens na variável que guarda os itens do combo box (iNoMesa)?

Código: Selecionar todos

iNoMesa := aItems

Alimentando um combobox

Enviado: 30 Out 2011 22:45
por marcos.gurupi
Eu jah tentei mas apresenta este erro:

Código: Selecionar todos

Warning BASE/1005  Message not found: HCOMBOBOX:_VAR
Called from source\rtl\tobject.prg->HCOMBOBOX:ERROR(0)
Called from source\rtl\tobject.prg->HCOMBOBOX:MSGNOTFOUND(0)
Called from source\rtl\tobject.prg->HCOMBOBOX:_VAR(0)
Called from C:\PROGS\PRINCIPAL\harbour\EspPaulista\POCKET2\AbrirMesa.prg->ALIMENTACOMBOBOX(45)
Called from C:\PROGS\PRINCIPAL\harbour\EspPaulista\POCKET2\AbrirMesa.prg->(b)ABRIRMESA(17)
Called from source\hcontrol.prg->HCONTROL:INIT(173)
Essa mesma rotina uso com sucesso com xhb 1.0.0 + hwgui 2.17

Agora estou usando o xhb 1.2.1 + hwgui 2.17 acho que pode ser algum bug do xhb

Marcos Roberto

Alimentando um combobox

Enviado: 30 Out 2011 22:54
por marcos.gurupi
Solucao foi dada pelo companheiro Fernando Athayde:

Código: Selecionar todos

obj:requery()
Somente isso!!

Marcos Roberto.