omoreno   16-05-2021, 18:28
#1
Hola a todos.

Entorno: Gambas: 3.16.0 y S.O.: Linux Mint 20.1

En un WebForm tengo dos WebComboBox:
  • El primero se carga con datos cuando el webform se inicia.
  • El segundo se carga con datos cuando se selecciona un elemento del primer WebComboBox.
  • En ambos WebComboBox agrego como primer elemento una cadena que referencia su objetivo:
           WebComboBox1.Add("*** Secciones ***", 0)
           WebComboBox2.Add("*** Categorías ***", 0)
  • Ambos WebComboBox  se cargan con los datos de sus respectivas tablas de SQLite.
Preguntas:
  1. ¿Cómo se puede hacer para que el segundo WebComboBox, cuando termina de cargar  los datos se posicione en el primer elemento ya que  WebComboBox2.Index = 0 no lo hace?.
  2. ¿Porque el evento _Click de ambos WebComboBox requiere pulsar dos veces  para que se ejecute, solo en dispositivos con S.O. Android  (Tabletas y celulares) ?.
Saludos y gracias por sus respuestas.
tincho   16-05-2021, 21:54
#2
Hola omoreno,
.Index no creo que haga lo que deseas. El ComBobox  (el normal) tiene dos parametros, por un lado el texto que se muesta en el y por otro la lista de valores posibles. buen en el WebComboBox si cuando termina de cargar le pones algo como  WebComboBox.Text = WebComboBox.List[0] tal vez si suceda lo que esperas.
Es algo que se me ocurre pero no use ese control todavía.
Saludos.

1 Saludo.
omoreno   17-05-2021, 14:58
#3
Hola Tincho.

Pence lo mismo del Index, pero la ayuda del Gambas dice esto con respecto al Index en los WebComboBox:
Cita:WebComboBox.Index (gb.web.gui)
Property Index As Integer
Return or set the index of the current selected item.

Probé con WebComboBox.Text = WebComboBox.List[0]
 
Ocurre lo mismo, el objeto no muestra ningún elemento seleccionado y en ambos casos ocurre lo mismo.
 
Nada con WebComboBox.Text = WebComboBox.List[0]
Nada con WebComboBox.Index = 0
 
Con las instrucciones anteriores, el elemento se muestra solo cuando hago una de la siguientes opciones:
  • Se recarga el navegador.
  • Se invoca el método .Refresh() desde otro evento ejemplo un Click de un botón.
 También realice esta prueba en la subrutina donde se carga el WebComboBox:
  • Al terminar la carga del segundo WebComboBox force el indice a un valor mayor a cero.
  • Agregue una llamada a una subrutina que crea elementos en un WebScrollView dependiendo de los elementos seleccionados en los dos WebComboBox.
Todos los todos los objetos del WebForm se crearon y mostraron sus datos, pero el WebComboBox  no muestra el elemento. Huh
 
Con respecto a la otra pregunta sobre el evento _Click doble en Android, nada de solución...
tincho   17-05-2021, 16:56
#4
(17-05-2021, 14:58)omoreno escribió: Con respecto a la otra pregunta sobre el evento _Click doble en Android, nada de solución...

No lo se, pero sube el programa y le hecho un vistazo.
Saludos.

1 Saludo.
omoreno   17-05-2021, 20:27
#5
He adjuntado un programa de ejemplo.

Verifica y me comentas que se puede estar realizando mal.

Principalmente el problema de tener que dar doble Click en los WebComboBox desde los navegadores web con Android. Huh

Saludos.
Archivos adjuntos
.gz
WebP4_WebComboBox-0.0.1.tar.gz (Tamaño: 13.55 KB Descargas: 3)
tincho   17-05-2021, 21:57
#6
Resolví lo del combobox lo del doble click no lo mire.
Código:
Private Sub WebCmbSecciones_Click()
  '

  Dim VecSecciones As String[] = WebCmbSecciones.Tag
  Dim sec As String
  Dim cat2 As String
  Dim cat As String

  sec = VecSecciones[CStr(WebCmbSecciones.Index)]
  cat2 = CargarCategorias(sec)

  Wait 0.1
  For Each cat In WebCmbCategorias.List
    If cat = cat2 Then
      WebCmbCategorias.Text = cat2
      Break
    Endif
  Next

Catch
  Message.Error("WebCmbSecciones_Click: " & Error.Text, "OK")
  '

End

Public Function CargarCategorias(SecId As String) As String
  '

  Dim CatId As New String[]
  Dim i As Integer

  WebCmbCategorias.Clear()
  WebCmbCategorias.Add("*** Categorias ***", 0)
  CatId.Add(0)
  '
  If SecId = "0" Then
    WebCmbCategorias.Tag = CatId
    WebCmbCategorias.Index = 0
    WebCmbCategorias.Refresh()
    Return
  Endif
  '

  For i = 0 To DataCat.Count - 1
    If Split(DataCat[i], ",")[0] = SecId Then[/i]
      CatId.Add(Split(DataCat, ",")[1])
      WebCmbCategorias.Add(Split(DataCat, ",")[2])
    Endif
  Next
  '
  WebCmbCategorias.Tag = CatId
  WebCmbCategorias.Index = 0

  Return WebCmbCategorias.List(WebCmbCategorias.Index)

End
Archivos adjuntos
.gz
WebP4_WebComboBox-0.0.2.tar.gz (Tamaño: 13.26 KB Descargas: 2)
Última modificación: 17-05-2021, 22:01 por tincho.

1 Saludo.
omoreno   18-05-2021, 00:58
#7
Gracias  tincho.

Tu código del evento WebCmbSecciones_Click()  y el de la  function CargarSecciones(SecId) As String ciertamente cargan el primer elemento del segundo WebComboBox, pero ahora no se cargan los elementos filtrados en el segundo WebComboBox.

Me parece extraño que se tenga que recorrer los elementos de un WebComboBox para seleccionar un elemento por texto y no por indice, después de cargarlo con datos desde programación.

Después de algunas pruebas vi que el método WebComboBox.Clear() parece ser el responsable de este extraño caso:
Sabemos que antes de cargar elementos en una lista hay que limpiar para no mezclar datos, pues cuando un WebComboBox tiene datos fijos y no se le aplica .Clear() todo funciona como se esperaba, pero entonce no tengo maneras de cargar de forma dinámica datos en estos WebComboBox.

¿Sera esto un posible Bug.?

Saludos.
tincho   18-05-2021, 01:03
#8
(18-05-2021, 00:58)omoreno escribió: ¿Sera esto un posible Bug.?

No lo se, sinceramente no use nunca estos controles en nada serio.
Saludos.

1 Saludo.
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.