Páginas (2): 1 2   
calcena   27-07-2020, 12:33
#1
Buenas a todos,  tengo una consulta, en una casuística traigo de DB 20 registros y los presento en un combobox, se puede limitar la visualización a bloques de 4 por ejemplo.

se visualizan 4 y aparece barra lateral para ir bajando en bloques contiguos de 4 items.


Saludos
gambafeliz   27-07-2020, 14:09
#2
Te pretendo ayudar pero no me queda claro lo que buscas. Te lo describo y tu me dices si lo he entendido.

1. Caja ComboBox
2. Clickamos en el botón con la flecha hacia abajo.
3. Se abre la lista hacia abajo.
4. Tu quieres que presente 4 items y cuando pasas estos items que pasen los siguientes 4 items y sustituyan los anteriores.

¿Es así?
jguardon   27-07-2020, 14:10
#3
Entiendo tu pregunta pero no la propuesta que haces. Pero ahora te preguntaré yo: ¿por qué motivo sólo quieres mostrar de 4 en 4? Es porque el control combobox se despliega muy grande hacia abajo o es otro el motivo?

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
calcena   27-07-2020, 20:36
#4
(27-07-2020, 14:10)jguardon escribió: Entiendo tu pregunta pero no la propuesta que haces. Pero ahora te preguntaré yo: ¿por qué motivo sólo quieres mostrar de 4 en 4? Es porque el control combobox se despliega muy grande hacia abajo o es otro el motivo?

Saludos

Si, correcto el tema es visualmente que no se despliegue una monstruosidad de componente con tantas opciones.
que se visualicen 4 con un scroll y se pueda ir recorriendo.

Si fuese un componente programado en web pues asincronamente con el scroll se enviaría una petición limit offset a DB para limitar ese retorno.

Saludos

(27-07-2020, 14:09)gambafeliz escribió: Te pretendo ayudar pero no me queda claro lo que buscas. Te lo describo y tu me dices si lo he entendido.

1. Caja ComboBox
2. Clickamos en el botón con la flecha hacia abajo.
3. Se abre la lista hacia abajo.
4. Tu quieres que presente 4 items y cuando pasas estos items que pasen los siguientes 4 items y sustituyan los anteriores.

¿Es así?

Si, es lo que por ejemplo haría un <select> en html, limitas los items que se visualizan, tu tienes 20, ves 4 y tienes un scroll lateral con el que vas bajando para ver los siguientes.

Saludos.
Última modificación: 27-07-2020, 20:37 por calcena.
jguardon   27-07-2020, 21:48
#5
La verdad es que lo único que se me ocurre es acceder al Parent y en el objeto (el control) que contiene el listado, cambiar la propiedad Height a un número de píxeles fijo que sea suficiente para ver 4 ítems como mucho. No creo que sea muy difícil, voy a mirar si puedo hacerlo.

También puedes crear un control heredado que tenga esa funcionalidad, por si lo vas a usar en más de un sitio.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
gambafeliz   28-07-2020, 10:17
#6
Hola calcena

Me temo que habrá que fabricarse como un por ejemplo nuevo componente.

Ya, que no veo que tenga esta funcionalidad.

Saludos, joven.
cogier   29-07-2020, 17:46
#7
Ejecute este código en una nueva aplicación.

Código:
Timer1 As Timer
Gridview1 As GridView
Label1 As Label
iCount As Integer

Public Sub Form_Open()

  Dim sData As String[] = Dir(User.home)
  Dim iLoop As Integer

  Me.W = 275
  Me.H = 200

  Timer1 = New Timer As "Timer1"

  With Gridview1 = New GridView(Me) As "Gridview1"
    .X = 5
    .Y = 50
    .H = 25
    .W = 250
    .Grid = False
    .Columns.Count = 1
    .Rows.Count = 0
    .Header = GridView.Horizontal
    .ScrollBar = Scroll.Vertical
    .Columns[0].Title = "ComboBox"
  End With

  For iLoop = 0 To sData.Max
    Inc Gridview1.Rows.Count
    Gridview1[iLoop, 0].Text = sData[iLoop]
  Next

End

Public Sub Gridview1_Enter()

  Timer1.Stop
  Gridview1.Height = (Gridview1.Rows[0].Height * 4) + 25

End

Public Sub Gridview1_Leave()

  Timer1.Start

End

Public Sub Gridview1_Click()

  Gridview1.Columns[0].Title = Gridview1[Last.Row, 0].Text

End

Public Sub Timer1_Timer()

  Gridview1.Height = 25
  Timer1.Stop

End
[Imagen: menu4.png]
vuott   29-07-2020, 19:18
#8
Sì, es un simpatico truco. Smile
Quizás... se puede eliminar el Objeto "Timer".

Código:
Gridview1 As GridView

    
Public Sub Form_Open()
     
  Dim sData As String[] = Dir(User.home)
  Dim iLoop As Integer
     
  Me.W = 275
  Me.H = 200
     
  With GridView1 = New GridView(Me) As "Gridview1"
    .X = 5
    .Y = 50
    .H = 25
    .W = 250
    .Grid = False
    .Columns.Count = 1
    .Rows.Count = sData.Count
    .Header = GridView.Horizontal
    .ScrollBar = Scroll.Vertical
    .Columns[0].Title = "ComboBox"
  End With
     
  For iLoop = 0 To sData.Max
    GridView1[iLoop, 0].Text = sData[iLoop]
  Next
     
End
     
Public Sub GridView1_Enter()
     
  GridView1.Height = Gridview1.Rows[0].Height * 4
     
End
     
Public Sub GridView1_Leave()
     
  GridView1.Height = GridView1[Last.Row, 0].H

End
     
Public Sub GridView1_Click()
     
  GridView1.Columns[0].Title = GridView1[Last.Row, 0].Text
     
End
Última modificación: 29-07-2020, 19:18 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
tincho   29-07-2020, 19:58
#9
Otra manera de hacerlo seria usando una sentencia SQL que incluya las palabras reservadas LIMIT y OFFSET
El método seria el siguiente:
Es necesaria una variable global integer
Luego cada vez que se hace click en el combobox y hay que rellenarlo con 4 registros
La consulta SQL, que tiene que ser algo como se muestra mas abajo, devolvera 4 registros o menos.
Código:
SELECT * FROM contacts LIMIT 4 OFFSET 2;
Donde LIMIT es la cantidad máxima de registros devueltos y OFFSET el numero de bloque, es decir si hay 20 registros en tabla 20/4 = 5 (no recuerdo si arranca de 0 o de 1)
Una vez obtenidos los 4 registros se cargan en el combobox y listo.
Luego en cada evento click del combobox el numero de offset se incrementara 1 hasta el maximo y ahí vuelta a empezar.
El resultado es un combobox que siempre muestra 4 registros peero son diferentes cada vez.
Saludos.

1 Saludo.
calcena   29-07-2020, 22:02
#10
(29-07-2020, 19:18)vuott escribió: Sì, es un simpatico truco. Smile
Quizás... se puede eliminar el Objeto "Timer".

Código:
Gridview1 As GridView

    
Public Sub Form_Open()
     
  Dim sData As String[] = Dir(User.home)
  Dim iLoop As Integer
     
  Me.W = 275
  Me.H = 200
     
  With GridView1 = New GridView(Me) As "Gridview1"
    .X = 5
    .Y = 50
    .H = 25
    .W = 250
    .Grid = False
    .Columns.Count = 1
    .Rows.Count = sData.Count
    .Header = GridView.Horizontal
    .ScrollBar = Scroll.Vertical
    .Columns[0].Title = "ComboBox"
  End With
     
  For iLoop = 0 To sData.Max
    GridView1[iLoop, 0].Text = sData[iLoop]
  Next
     
End
     
Public Sub GridView1_Enter()
     
  GridView1.Height = Gridview1.Rows[0].Height * 4
     
End
     
Public Sub GridView1_Leave()
     
  GridView1.Height = GridView1[Last.Row, 0].H

End
     
Public Sub GridView1_Click()
     
  GridView1.Columns[0].Title = GridView1[Last.Row, 0].Text
     
End

Fantástico justo la solución que buscaba, muchas muchas gracias.

(29-07-2020, 19:58)tincho escribió: Otra manera de hacerlo seria usando una sentencia SQL que incluya las palabras reservadas LIMIT y OFFSET
El método seria el siguiente:
Es necesaria una variable global integer
Luego cada vez que se hace click en el combobox y hay que rellenarlo con 4 registros
La consulta SQL, que tiene que ser algo como se muestra mas abajo, devolvera 4 registros o menos.
Código:
SELECT * FROM contacts LIMIT 4 OFFSET 2;
Donde LIMIT es la cantidad máxima de registros devueltos y OFFSET el numero de bloque, es decir si hay 20 registros en tabla 20/4 = 5 (no recuerdo si arranca de 0 o de 1)
Una vez obtenidos los 4 registros se cargan en el combobox y listo.
Luego en cada evento click del combobox el numero de offset se incrementara 1 hasta el maximo y ahí vuelta a empezar.
El resultado es un combobox que siempre muestra 4 registros peero son diferentes cada vez.
Saludos.

Buenas esta que me comentas se me había pasado por la cabeza, como comento en mi post, porque en los componentes web es como funciona, por ejemplo los paginadores, se hace el cálculo se divide entre páginas y cada vez se hacen petición de post por página moviendo el limit y el offset.

Gracias lo tendremos en cuenta aunque creo que utilizaré la solución del compañero vuott.
Última modificación: 29-07-2020, 22:04 por calcena.
Páginas (2): 1 2   
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.