Problema con Grid en genexus 9
Publicado por Gonzalo Jorquera (1 intervención) el 30/03/2015 17:49:15
Estimados,
En mi proyecto tengo 2 tipos de grid:
1) Con atributos y variables.
2)Solo variables (es decir sin tabla base).
Para el segundo, es un web panel con un grid donde la función "RecordCount" entrega un "-1", leyendo me entere que era por no tener atributos ("The Grid does not have base table Attributes must be included in the Grid to indicate navigation"). Sumado a lo anterior los botones de navegación, avanzar página del grid, retroceder, ir al inicio, ir al final funcionan igual de mal.
Las preguntas serian,
¿ existe un modo de ocupar la paginación de genexus con solo variables ? Si es si, como se hace (he buscado y no he encontrado).
Al ocupar solo variables, yo las lleno en el evento Load ¿está bien ?, si esto esta bien como se relaciona el refresh con el load. Pregunto porque cuando es un grid con tabla base, esto es automatico. Y me percato que al inicio no carga los elementos pero, si avanzo pagina muestra los registros.
la estructura de mi web panel es la siguiente:
Event Load
For each order //ordeno
Where //realizo where
Defined by //Tiene Vinculacion
For each order //ordeno elementos
Where //realizo where
//lleno variables
&Cont = &Cont + 1
load
EndFor
EndFor
&Registros = Grid1.RecordCount
EndEvent // Load
Primer problema, cuando se termina &Registros y &Cont son distintos, siempre registros tiene un refreso desactualizado. Es decir si eran 20 elementos, registros dice 0 y count dice 20, si avanzo de página registros dice 20 y count dice 40, y asi hasta el infinito.
Event Refresh
&Registros = Grid1.RecordCount
EndEvent // Refresh
/*****************************************************************************/
Event 'Limpiar'
&flag = 0
do 'limpiar_var'
EndEvent // 'Limpiar'
/*****************************************************************************/
Event Enter
&Pag = 1
&Flag = 1
grid1.FirstPage()
&Tot = Grid1.PageCount
EndEvent // Enter
/*****************************************************/
Event 'Last'
&Flag = 1
Grid1.LastPage()
&Pag = Grid1.PageCount
&Tot = Grid1.PageCount
EndEvent
/*****************************************************/
Event 'First'
&Flag = 1
Grid1.FirstPage()
&Pag = 1
&Tot = Grid1.PageCount
EndEvent
/*****************************************************/
Event 'back'
&Flag = 1
&pag = iif(&Pag > 1, &Pag-1, &Pag)
&Pag = iif(&Pag = 0, 1, &Pag)
grid1.PreviousPage()
&Tot = Grid1.PageCount
EndEvent // 'back'
/*****************************************************/
Event 'next'
&Flag = 1
&pag = iif(&Pag < Grid1.PageCount, &Pag + 1, &Pag)
grid1.NextPage()
&Tot = Grid1.PageCount
EndEvent // 'next'
Event 'Buscar'
&Pagina = 0
&Cont =0
&Filtro = 0
&Filtro += iif(&variable.IsEmpty(), 0, 1)
If &Filtro >= 1
&flag = 1 //Permite controlar la visualizacion de la grilla
&Pagina = 1
&Cargar = 'S' //Permite controlar cuando se debe cargar la grilla
Else
msg('Debe ingresar por lo menos 1 filtro para realizar la búsqueda')
&flag = 0
Endif
EndEvent // 'Buscar'
El evento buscar es cuando selecciono el botón buscar en los filtros, otra pregunta sería, en que momento se une ese evento con el "refresh" y el "load".
Como comentario anexo, tengo solo 1 mes de experiencia en Genexus. Así que si cometo errores de concepto, pido disculpas de antemano seguiré estudiando
saludos
En mi proyecto tengo 2 tipos de grid:
1) Con atributos y variables.
2)Solo variables (es decir sin tabla base).
Para el segundo, es un web panel con un grid donde la función "RecordCount" entrega un "-1", leyendo me entere que era por no tener atributos ("The Grid does not have base table Attributes must be included in the Grid to indicate navigation"). Sumado a lo anterior los botones de navegación, avanzar página del grid, retroceder, ir al inicio, ir al final funcionan igual de mal.
Las preguntas serian,
¿ existe un modo de ocupar la paginación de genexus con solo variables ? Si es si, como se hace (he buscado y no he encontrado).
Al ocupar solo variables, yo las lleno en el evento Load ¿está bien ?, si esto esta bien como se relaciona el refresh con el load. Pregunto porque cuando es un grid con tabla base, esto es automatico. Y me percato que al inicio no carga los elementos pero, si avanzo pagina muestra los registros.
la estructura de mi web panel es la siguiente:
Event Load
For each order //ordeno
Where //realizo where
Defined by //Tiene Vinculacion
For each order //ordeno elementos
Where //realizo where
//lleno variables
&Cont = &Cont + 1
load
EndFor
EndFor
&Registros = Grid1.RecordCount
EndEvent // Load
Primer problema, cuando se termina &Registros y &Cont son distintos, siempre registros tiene un refreso desactualizado. Es decir si eran 20 elementos, registros dice 0 y count dice 20, si avanzo de página registros dice 20 y count dice 40, y asi hasta el infinito.
Event Refresh
&Registros = Grid1.RecordCount
EndEvent // Refresh
/*****************************************************************************/
Event 'Limpiar'
&flag = 0
do 'limpiar_var'
EndEvent // 'Limpiar'
/*****************************************************************************/
Event Enter
&Pag = 1
&Flag = 1
grid1.FirstPage()
&Tot = Grid1.PageCount
EndEvent // Enter
/*****************************************************/
Event 'Last'
&Flag = 1
Grid1.LastPage()
&Pag = Grid1.PageCount
&Tot = Grid1.PageCount
EndEvent
/*****************************************************/
Event 'First'
&Flag = 1
Grid1.FirstPage()
&Pag = 1
&Tot = Grid1.PageCount
EndEvent
/*****************************************************/
Event 'back'
&Flag = 1
&pag = iif(&Pag > 1, &Pag-1, &Pag)
&Pag = iif(&Pag = 0, 1, &Pag)
grid1.PreviousPage()
&Tot = Grid1.PageCount
EndEvent // 'back'
/*****************************************************/
Event 'next'
&Flag = 1
&pag = iif(&Pag < Grid1.PageCount, &Pag + 1, &Pag)
grid1.NextPage()
&Tot = Grid1.PageCount
EndEvent // 'next'
Event 'Buscar'
&Pagina = 0
&Cont =0
&Filtro = 0
&Filtro += iif(&variable.IsEmpty(), 0, 1)
If &Filtro >= 1
&flag = 1 //Permite controlar la visualizacion de la grilla
&Pagina = 1
&Cargar = 'S' //Permite controlar cuando se debe cargar la grilla
Else
msg('Debe ingresar por lo menos 1 filtro para realizar la búsqueda')
&flag = 0
Endif
EndEvent // 'Buscar'
El evento buscar es cuando selecciono el botón buscar en los filtros, otra pregunta sería, en que momento se une ese evento con el "refresh" y el "load".
Como comentario anexo, tengo solo 1 mes de experiencia en Genexus. Así que si cometo errores de concepto, pido disculpas de antemano seguiré estudiando
saludos
Valora esta pregunta


0