Comunidad Gambas-es

Versión completa: WebComboBox
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.
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.
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...
(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.
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.
Resolví lo del combobox lo del doble click no lo mire.
GAMBAS
  1. Private Sub WebCmbSecciones_Click()
  2.   '
  3.  
  4.   Dim VecSecciones As String[] = WebCmbSecciones.Tag
  5.   Dim sec As String
  6.   Dim cat2 As String
  7.   Dim cat As String
  8.  
  9.   sec = VecSecciones[CStr(WebCmbSecciones.Index)]
  10.   cat2 = CargarCategorias(sec)
  11.  
  12.   Wait 0.1
  13.   For Each cat In WebCmbCategorias.List
  14.     If cat = cat2 Then
  15.       WebCmbCategorias.Text = cat2
  16.       Break
  17.     Endif
  18.   Next
  19.  
  20.   Message.Error("WebCmbSecciones_Click: " & Error.Text, "OK")
  21.   '
  22.  
  23.  
  24. Public Function CargarCategorias(SecId As String) As String
  25.   '
  26.  
  27.   Dim CatId As New String[]
  28.  
  29.   WebCmbCategorias.Clear()
  30.   WebCmbCategorias.Add("*** Categorias ***", 0)
  31.   CatId.Add(0)
  32.   '
  33.   If SecId = "0" Then
  34.     WebCmbCategorias.Tag = CatId
  35.     WebCmbCategorias.Index = 0
  36.     WebCmbCategorias.Refresh()
  37.     Return
  38.   '
  39.  
  40.   For i = 0 To DataCat.Count - 1
  41.     If Split(DataCat[i], ",")[0] = SecId Then[/i]
  42.       CatId.Add(Split(DataCat, ",")[1])
  43.       WebCmbCategorias.Add(Split(DataCat, ",")[2])
  44.     Endif
  45.   Next
  46.   '
  47.   WebCmbCategorias.Tag = CatId
  48.   WebCmbCategorias.Index = 0
  49.  
  50.   Return WebCmbCategorias.List(WebCmbCategorias.Index)
  51.  


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.
(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.