Visual Basic Foro
Programación => Visual Basic .NET / C# => Mensaje iniciado por: E N T E R en Abril 09, 2013, 08:29:26 pm
-
Lo que hago es crear una funcion para cargar 3 combos con diferentes select. mi pregunta es si hay una manera mas optima de hacer esto.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Call CargarCombos("SELECT * FROM filtros WHERE tipo='RUBRO'", "RUBRO")
Call CargarCombos("SELECT * FROM filtros WHERE tipo='SUB-RUBRO'", "SUB-RUBRO")
Call CargarCombos("SELECT * FROM filtros WHERE tipo='MARCA'", "MARCA")
End Sub
Sub CargarCombos(ByVal strQuery As String, ByVal xCombos As String)
Try
StrSQL = strQuery
strComando = New MySqlCommand(StrSQL, strConexion)
Dim drReader As New MySqlDataAdapter(strComando)
Dim dtFiltros As New DataTable
drReader.Fill(dtFiltros)
If xCombos = "RUBRO" Then
ComboBox1.DisplayMember = "nombres"
ComboBox1.ValueMember = "id"
ComboBox1.DataSource = dtFiltros
End If
If xCombos = "SUB-RUBRO" Then
ComboBox2.DisplayMember = "nombres"
ComboBox2.ValueMember = "idrubro"
ComboBox2.DataSource = dtFiltros
End If
If xCombos = "MARCA" Then
ComboBox3.DisplayMember = "nombres"
ComboBox3.ValueMember = "idmarca"
ComboBox3.DataSource = dtFiltros
End If
Catch ex As Exception
MsgBox(ex.Message.ToString, vbInformation)
Finally
strConexion.Close()
strConexion.Dispose()
End Try
End Sub
-
Podrias pasar tambien el control como variable y en el sql usar alias para hacer un solo DisplayMember y ValueMember. En resumidas se trata de factorizar para tener menos codigo, nada mas.
-
Si intente eso pero no se como pasar el control como variable. Tenes algun ejemplo de como hacer eso.
-
Uu, me la se con naranjas no con manzanas, pero al ser ambas frutas quiza puedas ajustarlo. En VB6 seria asi:
Por ejemplo paso el control DataCombo y una variable para saber cual consulta ejecutar
Call CargarDC(DataCombo1, 1)
Y el sub seria
Public Sub CargarDC(DCmb As DataCombo, Query As Integer)
Dim rs As New ADODB.Recordset
Select Case Query
Case 1: sql = "SELECT Id as COD, * FROM filtros WHERE tipo= 'RUBRO'"
Case 2: sql = "SELECT Idrubro as COD, * FROM filtros WHERE tipo= 'SUB-RUBRO'"
Case 3: sql = "SELECT Idmarca as COD, * FROM filtros WHERE tipo= 'MARCA'"
End Select
rs.Open sql(), dB, 1, 1
Set DCmb.RowSource = rs
With DCmb
.ListField = "nombres"
.BoundColumn = "COD"
End With
End Sub
Mas o menos esa es la idea
Saludos
-
De lujo amigo, quedo así el code y funciona de 10.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Call CargarCombos("SELECT * FROM filtros WHERE tipo='RUBRO'", ComboBox1)
Call CargarCombos("SELECT * FROM filtros WHERE tipo='SUB-RUBRO'", ComboBox2)
Call CargarCombos("SELECT * FROM filtros WHERE tipo='MARCA'", ComboBox3)
End Sub
Sub CargarCombos(ByVal strQuery As String, ByVal xCombo As ComboBox)
Try
'---------------------------------------------------------------------------------------------------------
' Conectar con BD MySQL
Call ConectarMySQL()
'---------------------------------------------------------------------------------------------------------
StrSQL = strQuery
strComando = New MySqlCommand(StrSQL, strConexion)
Dim drReader As New MySqlDataAdapter(strComando)
Dim dtFiltros As New DataTable
drReader.Fill(dtFiltros)
xCombo.DataSource = dtFiltros
xCombo.DisplayMember = "nombres"
xCombo.ValueMember = "id"
Catch ex As Exception
MsgBox(ex.Message.ToString, vbInformation)
Finally
strConexion.Close()
strConexion.Dispose()
End Try
End Sub
Saludos...
-
lo que no veo bien es que te conectas y desconectas solo por cargar un combo.
-
Si si asi es Seba, ya resolvi ese tema ya no lo tengo asi, tambien cambie la forma de esta funcion, uso el DataReader para cargarlo es mucho mas rápido.
Aca dejo por si le sirve a alguien.
Public Class DatosCombo
Public Property xValue As Integer
Public Property xDisplay As String
End Class
Sub CargarCombo(ByVal strQuery As String, ByVal xCombo As ComboBox)
StrSQL = strQuery
strComando = New MySqlCommand(StrSQL, strConexion)
rsReader = strComando.ExecuteReader
Dim Lista As New List(Of DatosCombo)
While rsReader.Read
Dim item As New DatosCombo
item.xValue = CInt(rsReader("id"))
item.xDisplay = CStr(rsReader("nombres"))
Lista.Add (item)
End While
xCombo.DisplayMember = "xDisplay"
xCombo.ValueMember = "xValue"
xCombo.DataSource = Lista
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call CargarCombo("SELECT id,nombres FROM articulos", ComboBox1)
End Sub