Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema cargar combobox entre funciones

Estas en el tema de Problema cargar combobox entre funciones en el foro de .NET en Foros del Web. Hola a todos. Vereis, para optimizar el codigo, ahora me lo estoy revisando y creo que sería posible mejorarlo, por eso acudo a vuestra ayuda. ...
  #1 (permalink)  
Antiguo 29/12/2010, 04:31
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 1 mes
Puntos: 3
Exclamación Problema cargar combobox entre funciones

Hola a todos.

Vereis, para optimizar el codigo, ahora me lo estoy revisando y creo que sería posible mejorarlo, por eso acudo a vuestra ayuda.

Tengo un modulo en que carga datos en un combobox después de hacer una consulta a una BD.

El caso es que el codigo de ejecución de la consulta es redundante, con lo que ahora estoy motando una función dentro del propio modulo para optimizar el codigo.

Tengo 14 cases, con lo cual, imaginad tener el mismo codigo 14 veces. 14 * 3 lineas cada vez = 42 lineas que podría suprimir si creo la función:

Ahora mismo está así.

Código VB .NET:
Ver original
  1. Case 1
  2.      'este caso carga los datos de una tabla
  3.      consulta = "select ..... from ..... where ..... = 1"
  4.  
  5.      cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  6.      dt = New DataTable
  7.      cmd.Fill(dt)
  8.                  
  9.      For i = 0 To dt.Rows.Count - 1
  10.           Formulario_Quejas.combobox1.Items.Add(dt.Rows(i).Item(0))
  11.      Next
  12.  
  13. Case 2
  14.      'este caso carga los datos de otra tabla
  15.      consulta = "select ..... from ..... where ..... = 2"
  16.  
  17.      cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  18.      dt = New DataTable
  19.      cmd.Fill(dt)
  20.                  
  21.      For i = 0 To dt.Rows.Count - 1
  22.           Formulario_Quejas.combobox2.Items.Add(dt.Rows(i).Item(0))
  23.      Next
  24.  
  25. Case 3
  26.      (...)

Ahora está así:
Código VB .NET:
Ver original
  1. Case 1
  2.      'este caso carga los datos de una tabla
  3.      total=ejecuta_consulta("select ..... from ..... where ..... = 1")
  4.                  
  5.      For i = 0 To total - 1
  6.           Formulario_Quejas.combobox1.Items.Add[COLOR="Red"](dt.Rows(i).Item(0))[/COLOR]
  7.      Next
  8.  
  9. Case 2
  10.      'este caso carga los datos de otra tabla
  11.      total=ejecuta_consulta("select ..... from ..... where ..... = 2")
  12.                  
  13.      For i = 0 To total - 1
  14.           Formulario_Quejas.combobox2.Items.Add[COLOR="Red"](dt.Rows(i).Item(0))[/COLOR]
  15.      Next
  16.  
  17. Case 3
  18.      (...)
  19.  
  20. Public Function ejecuta_consulta(ByVal consulta As String) as string
  21.      Dim cmd As OleDb.OleDbDataAdapter
  22.      Dim dt As DataTable
  23.  
  24.      'conectamos a la base de datos
  25.      conexion.conecta()
  26.  
  27.      try
  28.           cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  29.           dt = New DataTable
  30.           cmd.Fill(dt)
  31.  
  32.           return dt.rows(0).item(0)
  33.      catch ex as exception
  34.           messagebox.show(ex.message)
  35.      finally
  36.           conexion.desconecta()
  37.      end try
  38. End function

El problema está en el for que hay en el primer sub, ya que no puede leer del datatable, que está en el Function y claro, el Function solo devuelve el total de datos, no devuelve los datos en si como para leerlos 1 a 1.

Como lo podría solucionar?

Un cordial saludo y Felices Fiestas a todos :)

Última edición por Fernando_net; 29/12/2010 a las 04:37
  #2 (permalink)  
Antiguo 29/12/2010, 07:40
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Problema cargar combobox entre funciones

Podrias modificarlo asi... :

Código vb:
Ver original
  1. Case 1
  2. llenoCombo(combobox1,"1")
  3. Case 2
  4. llenoCombo(combobox2,"2")
  5. Case 3
  6. (...)
  7.  
  8. Public Sub llenoCombo(Byval combo As ComboBox, Byval parametro As String)
  9.  
  10. Dim consulta = "select... from .... where ... = " & parametro
  11. Dim cmd As OleDb.OleDbDataAdapter
  12. Dim dt As DataTable
  13.  
  14. 'conectamos a la base de datos
  15. conexion.conecta()
  16.  
  17. cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  18. dt = New DataTable
  19. cmd.Fill(dt)
  20.  
  21. total = dt.rows(0).item(0).toString()
  22.  
  23. For i = 0 To total - 1
  24. Formulario_Quejas.combo.Items.Add(dt.Rows(i).Item(0))
  25. Next
  26.  
  27. End Sub

Talvez se pueda mejorar mas, ahora ando ocupado mas tarde sigo revisando tu code y te respondo para optimizar mas
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 29/12/2010, 08:43
Avatar de devilinside  
Fecha de Ingreso: marzo-2008
Ubicación: En Perú
Mensajes: 73
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Problema cargar combobox entre funciones

No sé si la consulta es la misma para todos los caso y que solamente varía el parámetro, al menos eso parece por lo que has publicado. Si es así, aquí te dejo una propuesta y espero q al menos te de una idea.

Código Vb.Net:
Ver original
  1. Private Sub Llenado()
  2.         llenaCombo(Formulario_Quejas.combobox1, 1)
  3.         llenaCombo(Formulario_Quejas.combobox2, 2)
  4.         llenaCombo(Formulario_Quejas.combobox3, 3)
  5.         llenaCombo(Formulario_Quejas.combobox4, 4)
  6.     End Sub
  7.  
  8.     Private Sub llenaCombo(ByVal MiCombo As ComboBox, ByVal Parametro As Integer)
  9.         With MiCombo
  10.             .DataSource = ejecuta_consulta("select id,Nombre from MiTabla where id=", Parametro)
  11.             .ValueMember = "id"
  12.             .DisplayMember = "Nombre"
  13.         End With
  14.     End Sub
  15.  
  16.     Public Function ejecuta_consulta(ByVal consulta As String, ByVal Parametro As Integer) As DataTable
  17.         Dim cmd As OleDb.OleDbDataAdapter
  18.         Dim dt As DataTable
  19.         Dim conexion As New MiConexion
  20.         Try
  21.             consulta = consulta & CStr(Parametro)
  22.             'conectamos a la base de datos
  23.             conexion.conecta()
  24.             'cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  25.             cmd = New OleDb.OleDbDataAdapter(consulta, conexion)
  26.             dt = New DataTable
  27.             cmd.Fill(dt)
  28.             'Return dt.Rows(0).Item(0)
  29.             Return dt
  30.  
  31.         Catch ex As Exception
  32.             MessageBox.Show(ex.Message)
  33.         Finally
  34.             conexion.desconecta()
  35.         End Try
  36.     End Function

Saludos.
  #4 (permalink)  
Antiguo 29/12/2010, 08:45
Avatar de devilinside  
Fecha de Ingreso: marzo-2008
Ubicación: En Perú
Mensajes: 73
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Problema cargar combobox entre funciones

Plop!!... cuando publiqué no había ninguna respuesta... ahora ya tienes 2! jaja

Ambas ideas son buenas, tú eliges :)

Saludos
  #5 (permalink)  
Antiguo 29/12/2010, 08:48
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Problema cargar combobox entre funciones

jajaja devilinside no importa si posteas otra respuesta, el las analiza y las puede combinar :)
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #6 (permalink)  
Antiguo 30/12/2010, 01:45
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Problema cargar combobox entre funciones

Devilinside, muchísimas gracias!

Ha quedado todo mucho más limpio y optimizado, genial :)

Saludos

Etiquetas: combobox, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:32.