Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
[SOLUCIONADO] GridView Que Aumenta De Rows
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: GridView Que Aumenta De Rows 
 
Buenas compañeros, en mi empeño y cabezonería en realizar las cosas como creo que son mejor, bajo mi punto de vista (todo es discutible).
Paso a detallar cómo he conseguido realizar lo que buscaba, salvo un pequeño detalle que a ver si alguien me puede guiar.

Por si a alguien le interesa desarrollar tal de esta forma que llevo explicando durante el post paso a detallar la solucion para el objeto GridView. He testeado con otros objetos y no daban problemas.

Form Usuarios


Public Sub Form_Open()
Private rstResultado As Result
Private sFiltro As String = "%"
Private sEstado As String = "%"

  ' Cargamos el ResultSet con los filtros
  rstResultado = cUsuarios.GetUsers(sFiltro, sEstado)
  ' obtenemos los registro para pintar el grid  
  grvUsuarios = cUsuarios.GetGrid(grvUsuarios, rstResultado)
  
  
  
End




Public Sub txtFiltroUsuarios_KeyRelease()
  
  sFiltro = txtFiltroUsuarios.Text
  rstResultado = cUsuarios.GetUsers(sFiltro, sEstado)
  grvUsuarios = cUsuarios.GetGrid(grvUsuarios, rstResultado)
  
End
 



Clase/Modulo  cUsuarios capa DAO

Public Function GetGrid(ByRef objGridView As GridView, rstResultado As Result) As GridView
  
  Dim i As Integer = 0
  Dim n As Integer = 0  
  
  objGridView.Columns.Count = rstResultado.Fields.Count
' objGridView.Header = rstResultado.Fields.Count     ' Esta línea se debe comentar
  
  objGridView.Columns[0].width = 0
  objGridView.Columns[0].Resizable = False
  objGridView.Columns[1].Title = "COD_USUARIO"
  objGridView.Columns[1].width = 100
  objGridView.Columns[1].Resizable = False
  objGridView.Columns[2].Title = "NOMBRE"
  objGridView.Columns[2].width = 125
  objGridView.Columns[2].Resizable = False
  objGridView.Columns[3].Title = "APELLIDO1"
  objGridView.Columns[3].width = 125
  objGridView.Columns[3].Resizable = False
  objGridView.Columns[4].Title = "APELLIDO2"
  objGridView.Columns[4].width = 125
  objGridView.Columns[4].Resizable = False
  objGridView.Columns[5].Title = "ROL"
  objGridView.Columns[5].width = 125
  objGridView.Columns[5].Resizable = False
  objGridView.Columns[6].width = 25
  objGridView.Columns[6].Resizable = False
  '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  objGridView.Rows.Count = 0
  
  rstResultado.MoveFirst  
  Do While rstResultado.Available
   ' objGridView.Rows.Count = rstResultado.Count ' Esta linea queda comentada para evitar numeradores en rows
    
    objGridView[i, 0].Text = rstResultado!ID_USUARIO
    objGridView[i, 1].Text = rstResultado!COD_USUARIO
    objGridView[i, 2].Text = rstResultado!NOMBRE
    objGridView[i, 3].Text = rstResultado!APELLIDO1
    objGridView[i, 4].Text = rstResultado!APELLIDO2
    objGridView[i, 5].Text = rstResultado!RNOMBRE
    
    If rstResultado!ES_BAJA = "+" Then
      objGridView[i, 6].Picture = gConst.picBaja    
      
    Else
      objGridView[i, 6].Picture = gConst.picActivo
    End If
    
    Inc i
    rstResultado.MoveNext
  Loop
  
  Return objGridView
  
End
 


Bueno, todo resuelto hasta el siguiente detalle....me aparecen los numeradores de Row de los registros, puede evitarlo???
Adjunto pantallas:

image


image



Saludos.
 



 
última edición por calcena el Viernes, 10 Agosto 2018, 08:58; editado 4 veces 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: GridView Que Aumenta De Rows 
 
calcena escribió: [Ver mensaje]
Nada he probado a pasarlo como método en vez de como función pero no consigo que el grid me quede limpio para el reinicio del mismo.

He probado con Clear, con Refresh()

Alguien saber como puedo dejar reiniciado un gridview para poder pasarlo por referencia y que se cargue correctamente.

Esta misma metodología la he utilizado en otros lenguajes y siempre funciona correctamente, algo hay en el reinicio del componente que no hago bien.

Saludos.


Os incluyo una imagen del resultado de las pruebas y el código, el problema sigue residiendo en el momento de teclear para realizar un filtrado.


gestionproyectos



Public Sub txtFiltroUsuarios_KeyRelease()
  
  sFiltro = txtFiltroUsuarios.Text
  
  rstResultado = cUsuarios.GetUsers(sFiltro, sEstado)

  grvUsuarios = cUsuarios.GetGrid(grvUsuarios, rstResultado)

End  

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Public Function GetUsers(sFiltro As String, sEstado As String) As Result
  
  Dim rstResultado As Result
  Dim sSql As String = Null
  
  sSql = "SELECT "
  sSql &= "U.ID_USUARIO, "
  sSql &= "U.COD_USUARIO, "
  sSql &= "U.NOMBRE, "
  sSql &= "U.APELLIDO1, "
  sSql &= "U.APELLIDO2, "
  sSql &= "R.NOMBRE RNOMBRE, "
  sSql &= "U.ES_BAJA "
  sSql &= "FROM USUARIOS U "
  sSql &= "INNER JOIN ROLES R "
  sSql &= "ON U.ID_ROL = R.ID_ROL "
  sSql &= "WHERE (U.COD_USUARIO LIKE '%" & sFiltro & "%' OR U.NOMBRE LIKE '%" & sFiltro & "%' OR U.APELLIDO1 LIKE '%" & sFiltro & "%' OR U.APELLIDO2 LIKE '%" & sFiltro & "%' OR R.NOMBRE LIKE '%" & sFiltro & "%')"
  sSql &= "AND U.ES_BAJA LIKE '" & sEstado & "'"
  
  conn = gConexion.ConectarDB()
  
  rstResultado = conn.Exec(sSql)
  
  Return rstResultado
  
End

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Public Function GetGrid(objGrid As GridView, rstResultado As Result) As GridView
  
  Dim objGridView As GridView = objGrid
  Dim i As Integer = 0
  
  objGridView.Columns.Count = rstResultado.Fields.Count
  objGridView.Header = rstResultado.Fields.Count
  
  objGridView.Columns[0].width = 0
  objGridView.Columns[0].Resizable = False
  objGridView.Columns[1].Title = "COD_USUARIO"
  objGridView.Columns[1].width = 100
  objGridView.Columns[1].Resizable = False
  objGridView.Columns[2].Title = "NOMBRE"
  objGridView.Columns[2].width = 125
  objGridView.Columns[2].Resizable = False
  objGridView.Columns[3].Title = "APELLIDO1"
  objGridView.Columns[3].width = 125
  objGridView.Columns[3].Resizable = False
  objGridView.Columns[4].Title = "APELLIDO2"
  objGridView.Columns[4].width = 125
  objGridView.Columns[4].Resizable = False
  objGridView.Columns[5].Title = "ROL"
  objGridView.Columns[5].width = 125
  objGridView.Columns[5].Resizable = False
  objGridView.Columns[6].width = 25
  objGridView.Columns[6].Resizable = False
 
   rstResultado.MoveFirst
  
  Do While rstResultado.Available
    objGridView.Rows.Insert(i, 1)
    objGridView[i, 0].Text = rstResultado!ID_USUARIO
    objGridView[i, 1].Text = rstResultado!COD_USUARIO
    objGridView[i, 2].Text = rstResultado!NOMBRE
    objGridView[i, 3].Text = rstResultado!APELLIDO1
    objGridView[i, 4].Text = rstResultado!APELLIDO2
    objGridView[i, 5].Text = rstResultado!RNOMBRE
    
    If rstResultado!ES_BAJA = "+" Then
      objGridView[i, 6].Picture = gConst.picBaja    
      
    Else
      objGridView[i, 6].Picture = gConst.picActivo
    End If
    
    i += 1
    rstResultado.MoveNext
  Loop
  
  Return objGridView
  
End

 



Y cuantos registros tienes actualmente en tu DB??? Es solo el de Calcena???

Pregunto porque en tu consulta tienes "WHERE (U.COD_USUARIO LIKE '%" & sFiltro & "%' OR ... " Entonces si el filtro está vacío tendrías algo como "WHERE (U.COD_USUARIO LIKE '%%' OR ... " con lo que te da todos los registros.

Tal vez lo que puedes hacer es que en el evento txtFiltroUsuarios_KeyRelease() hacer una verificación de que el textbox no esté vacío (o mejor aún que tenga un mínimo de caracteres) para tomar un filtro valido.

Public Sub txtFiltroUsuarios_KeyRelease()

sFiltro = txtFiltroUsuarios.Text

If Len(sFiltro) > 3 then
  rstResultado = cUsuarios.GetUsers(sFiltro, sEstado)
  grvUsuarios = cUsuarios.GetGrid(grvUsuarios, rstResultado)
Else
  grvUsuarios = New GridView ( padre_contenedor )  As "nombre_para_eventos"
EndIf

End
 



.... O mejor aún... Modificar la función que devuelve el gridview para devolverlo sin data si el filtro no es valido.

Saludos.
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: GridView Que Aumenta De Rows 
 
calcena escribió: [Ver mensaje]
...Bueno, todo resuelto hasta el siguiente detalle....me aparecen los numeradores de Row de los registros, puede evitarlo???...


Sí, con la propiedad Header http://gambaswiki.org/wiki/comp/gb.qt4/gridview/header

gridview1.Header = GridView.Horizontal
 


Saludos.
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: GridView Que Aumenta De Rows 
 
calcena escribió:  


Buenas shordi, bueno no entiendo lo que comentas de que por definición debe ser lento y engorroso, al final es separar por capas la aplicación que en OOP se utiliza normalmente, he probado tu forma de hacerlo pero el problema que tengo es que si mi variable rstResultado se vuelve a reaprovechar con otro método se vuelve a ejecutar la recarga del método _DATA.

La capa DAO se encarga del acceso a los datos, en gambas es casi lo mismo que hablar de Connections y Results. Los Gridview son parte de la capa de visualización. No deberías mezclar unas con otras. Una vez obtenidos los datos en un Result, DAO ha finalizado su tarea y sólo es cuestión de mostrar los datos.
No entiendo lo que quieres decir con "reaprovechar". El método _Data se ejecuta cada vez que accedes a una celda. Y sólo a las celdas que accedes lo que debería darte pistas de la velocidad que se alcanza. No hace falta, como tú haces, cargar toooodo el resultado de la consulta a la BD en el GridView (si tienes 200.000 filas en la tabla cargas 200.000 x nº de campos datos en el gridview), sino  sólo las filas que hagas visibles.
Citar:

Tal como se ve en la imagen que he adjuntado, lo que pretendo es que pulsando sobre el textbox (que lo paso como parámetro) se filtren los resultados. Pues con todos lo que he testeado nada de nada.

Alguna idea para este tipo de problema?

No filtres sobre el gridview. Éste es un "mecanismo de visualización". Si los datos surgen de una BD, filtra sobre la BD, que tiene en sí misma y por definición la "inteligencia" y los mecanismos que necesitas, no sobre el gridview que sólo es una forma "tonta" de mostrar datos.

Citar:

Tu ejemplo Shordi va muy bien pero al no tener filtro no es la misma problemática.

A ver ti tengo tiempo y te pongo algún ejemplo de filtrado.
Citar:

Respecto a tu propuesta:

grvUsuarios = Null
  grvusuarios = New GridView

 


me dice el compilador : NOT ENOUGH ARGUMENTS.....se necesita algún argumento en concreto para instanciar un GridView nuevo??


Todo control creado por código necesita que se le pase el objeto contenedor GrvUsuarios = New Gridview(Me) si es directamente sobre el formulario o GrvUsuarios=new Gridview(panel1) si es sobre un panel, por ejemplo.
 




===================
No podemos regresar
 
última edición por shordi el Viernes, 10 Agosto 2018, 08:35; editado 3 veces 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] GridView Que Aumenta De Rows 
 
Gracias shordi por tus comentarios.

por mi parte creo que, como indicas por una parte debería separar en una capa más el Render de los datos, de forma que debería quedar algo así:

DAO --> suministra un ResulSet con los datos ya filtrados (Modelo)
OR   --> renderiza los objetos que les pasamos (Controlador)
Forms --> pinta los objetos que pasamos desde el Form al OR con la información correcta (Vista)

Creo que esta arquitectura sería la correcta.

Sobre lo que comentas de filtrar los datos en la parte lógica, es justamente lo que se está realizando en la parte del ResultSet que se encarga de utilizar el consumo de la DB para realizar el filtrado según parámetros que le pasamos. Podemos pasar al objeto un ResultSet de 200.000 registros o de 5 la capa OR recibe ese resultset y objeto por referencia, lo llena con los datos de la consulta y lo devuelve a su peticionario, de forma que tenemos el gridview correctamente completado.

El tema de reaprovechamiento viene por lo siguiente

Private rstResultset as Result --> esta variable la puedes utilizar en todo tu formulario de forma que cada métdo o función puede rellenar el mismo objeto, pues bien lo que me pasaba con ejemplo tuyo de utilizar el objeto_Data es que cada vez que el ResultSet se rellenaba ... me ejecutaba nuevamente la recarga del grid (cosa algo extraña).
En mi caso lo reutilizaba para recargar un comboBox.

Finalmente con todos estos datos y estas exposiciones, por mi parte he conseguido obtener lo que pretendía desde un principio.

Ahora podemos hilar más fino en si las formas son más o menos correctas, o si más o menos capas o si un objeto no debe o debe hacer según que tareas.

Muchas gracias a todos por la implicación en Agosto sobre todo y nada yo he expuesto mi linea de desarrollo, cualquier apunte bienvenido sea.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] GridView Que Aumenta De Rows 
 
El estar de vacaciones da tiempo para todo... si estás en tu casa y no hay playa, claro.    
Esta mañana te he hecho un pequeño ejemplo de la diferencia entre tu método y el que gambas establece con el evento _Data.
el resultado, sobre una tabla de 800.000 registros en mi máquina es éste:
 captura_de_pantalla_de_2018_08_10_11_09_31

Como ves, con tu método, el tiempo de carga es, más o menos, 40 veces superior. Te he incluído en el ejemplo un ejemplo de mi control dbGridFilter, que posee las propiedades de filtrado que estabas buscando, y que puedes adaptar a tus proyectos como quieras, que para eso es Software Libre      

Te he adjuntado una pantalla de ayuda con un resumen del sistema de ayudas que tengo montado en los programas del curro. Más o menos viene a decir ésto:
Citar:


Ordenar Registros:

Para ordenar los registros de las listas basta con hacer click sobre el título de la columna que queremos ordenar.
Primer Click = Ordenar de menor a mayor
Segundo Click (no doble click) = Ordenar de mayor a menor
Tercer Click = Columna desordenada
Mayúscula + Click = Elimina todas los ordenaciones previas y ordena solo por ésta columna de menor a Mayor.

Las ordenaciones son acumulativas pudiendo ordenar por varias columnas. Es útil pensar en la sintáxis “Ordena primero por este campo y dentro de los que sean iguales por este otro, etc.”

Seleccionar Registros (filtrado):

Hay tres maneras de filtrar registros:

-Filtrar sobre la casilla activa:
Hacemos click sobre celda cuyo valor queremos filtrar y después hacemos Mayúscula + doble click o pulsamos el botón “Filtrar sobre celda seleccionada” de la barra de botones de filtro.
A éste respecto debemos tener en cuenta que los filtros sobre celda activa son acumulativos funcionando igual que se explica más arriba con las ordenaciones. Es decir que si, como en la pantalla, hemos filtrado que la Provincia sea “Albacete”, podemos luego, por ejemplo, hacer click sobre la celda “Localidad” de un registro que contenga “Almansa” y volver a pulsar el mismo botón de “Filtrar sobre la celda seleccionada”. Esto nos filtraría la lista a los regtistros de la provincia =  Albacete y la Localidad = Almansa.
Como norma básica cuantas más casillas sean así tratadas, menos registros aparecerán en la lista.

-Filtrar por contenido de celda:
Puede ocurrir que la celda sobre la que queremos buscar no esté a la vista y no podamos hacer click sobre una que contenga lo que deseamos, entonces lo más sencillo es hacer click sobre cualquier celda de esa columna (contenga lo que contenga) y teclear después todo o parte de la condición que busquemos. En la casilla de búsqueda, debajo de la lista, irá apareciendo el texto tecleado y con la tecla Enter se realizará la búsqueda por aproximación.

La búsqueda por aproximación la podemos traducir como ” que contengan ” y puede dar resultados bastante ambiguos, según casos. Como norma básica, cuanto más letras tecleemos menos registros irán apareciendo.

Como alternativa a la tecla Enter, podemos lanzar el filtro pulsando en el botón que aparece junto a la casilla de búsqueda, marcado por una lupa en la imagen. El botón con el ojo nos presenta una representación en lenguaje humano del filtro que tenemos activo.

El botón  con la X roja sobre el embudo elimina los filtros activos y nos presenta todos los registros accesibles.

-Crear un Filtro avanzado:

La cantidad de selecciones que podemos realizar con estos sistemas son bastante limitadas. Para filtros más flexibles y/o complejos disponemos de los Filtros Avanzados, accesibles a través del botón con el cuadrado sobre el embudo.

Todas estas acciones también pueden realizarse a través de los menús contextuales si es que están activos, pulsando el botón derecho del ratón sobre el registro o columna deseados.

Filtros Avanzados:
Para confeccionar un filtro debemos seguir los pasos especificados en orden:
Seleccionamos el campo por el que queremos filtrar
Seleccionamos la condición que queremos que cumpla.
Introducimos el valor que queremos que contenga. Esto se puede hacer o bien tecleando en la casilla correspondiente o bien pulsando el botón con la lupa, lo que nos desplegará una lista con los valores existentes para ese campo (puede tardar en tablas muy grandes)
Añadimos la condición a la cadena de filtro con el botón a la derecha de la lupa.
Si son necesarias más condiciones, pulsaremos sobre el operador lógico deseado en la barra vertical de la derecha.
Los operadores lógicos disponibles son :
Y .- and, que se traduce como ” y que también “. Como norma cuantos más and existan menos registros se incluirán en el filtro.
O .- or, que se traduce como ” o que “. Como norma cuantos más or existan, más registros se incluirán en el filtro.
No.- not, que se traduce como ” que no “. Invierte el valor de cierto o falso de la condición que figure detrás.
También podemos añadir paréntesis que ejercen la misma función que en la fórmulas matemáticas, es decir, se evalúa primero el contenido del paréntesis y su resultado -cierto o falso- se evalúa con el resto de las condiciones. Son absolutamente necesarios para según qué consultas.Por ejemplo, si deseamos un listado de las Especialidades de Inglés y Matemáticas de la provincia de Albacete, el filtro:
`Provincia` = ‘Albacete’ and `Especialidad` = ‘Matemáticas’ or `Especialidad` = 'Inglés’
Producirá un resultado erróneo, puesto que incluirá a los de Matemáticas de Albacete y todos los de Inglés sean de Albacete o no. Sin embargo, el filtro:
`Provincia` = ‘Albacete’ and (`Especialidad` = ‘Inglés’ or `Especialidad` = ‘Matemáticas’ )

Producirá el resultado deseado, puesto que primero se evaluará si es Matemáticas o Inglés y caso de ser alguna de las dos condiciones se evaluará si es de Albacete.

En la casilla etiquetada “Cadena de Filtro” podremos ver el filtro que vayamos construyendo según lo vayamos haciendo. aunque no aparezca en castellano, hay algunas pequeñas cosas que sí debemos controlar para asegurarnos de que no se produzcan errores:

La Cadena de filtro no puede empezar por un operador lógico “or” o “and” o por un fin de paréntesis “)”
No debe haber nunca dos operadores lógicos and u or seguidos. Si vemos en la cadena “and and” o “and or” o “or or”, se generará un error. Esto no se aplica, naturalmente al operador not.
Los paréntesis, si los hay, deben estar siempre balanceados es decir por cada paréntesis que se abre debe haber uno que se cierra.
Si queremos retocar la cadena de filtro, no es obligatorio hacerlo con los botones y listas: podemos teclear directamente sobre ella. Esto nos da más libertad, pero también favorece la aparición de errores.

Es necesario recordar que la cadena de filtro se comparará con cada uno de los registros de la lista para decidir si debe o no ser incluído en ella. Por tanto condiciones imposibles generarán listas vacías. Por ejemplo, la cadena de filtro:

Localidad = “Albacete” and Localidad=”Toledo”

Proporcionará una lista vacía dado que ningún registro puede tener en el campo localidad Albacete y también Toledo (en el ejemplo debiera ser utilizado el operador or, que produciría una lista de los registros de Albacete y de Toledo).

Cuando ya hemos establecido algún tipo de filtro en la lista deslizante con los botones de “Filtrar por la celda Activa”  o tecleando valores estando situados en alguna columna (Ver Listas Deslizantes), el filtro así creado aparecerá en la casilla de “Cadena de Filtro” en el momento de abrir la pantalla, pudiendo así, ser modificada o complementada adecuadamente.


Lo he colgado aquí: https://www.gambas-es.org/viewtopic.php?f=5&p=42808


Espero que te sea útil.

Saludos
 




===================
No podemos regresar
 
última edición por shordi el Viernes, 10 Agosto 2018, 11:30; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] GridView Que Aumenta De Rows 
 
Brutal!! muchas gracias shordi, así me gusta a mi las discusiones técnicas, contrastadas con datos, que se pueden extrapolar a máquinas reales de producción y que su afectación concurrente se soluciona antes de que se de el problema.

Probaré a conciencia tu componente y miraré de reorientar esta linea de programación que tan acostumbrado estoy.

Saludos.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes [SOLUCIONADO] Affected Rows calcena General 7 Jueves, 26 Julio 2018, 18:59 Ver último mensaje
shordi
No hay nuevos mensajes [SOLUCIONADO] Deseleccionar Row En Un Grid... calcena General 2 Jueves, 16 Agosto 2018, 14:48 Ver último mensaje
calcena
No hay nuevos mensajes Encabezados De GridView [SOLUCIONADO] elitedigital2005 General 13 Martes, 09 Agosto 2016, 14:57 Ver último mensaje
tercoIDE
No hay nuevos mensajes [SOLUCIONADO] GridView SelectedCell calcena General 2 Sabado, 28 Julio 2018, 11:43 Ver último mensaje
calcena
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario