Visual Basic.NET - Ordenar consultas SQL en ComboBox

 
Vista:
sin imagen de perfil

Ordenar consultas SQL en ComboBox

Publicado por Mark (4 intervenciones) el 19/12/2016 20:07:39
Hola a todos!!

Hace unos días que estoy intentando hacer lo siguiente en dos ComboBox:
Deseo recuperar datos de un servidor MySQL y cargarlos a dos ComboBox, uno será el llamado ID y el otro será el llamado Nombre. Por ejemplo, yo tengo en una tabla SQL los siguientes registros:
ID-------Nombre
1--------Pablo
2--------David
3--------Antonio
4--------Marcos
5--------Laura
Bien, este no es el problema. El problema viene cuando lo que quiero hacer es que los datos que se cargan en los ComboBox estén AMBOS ordenados alfabéticamente,y que al elegir, por ejemplo, el número 1, en el otro comboBox se muestre el nombre "Pablo". De la misma forma, Si escojo el nombre "Antonio", se deberá mostrar el número 3 en combobox que señala los ID.

Para que os hagáis una idea, los combobox deberán estar ordenados de esta forma:
El combobox de ID: 1, 2, 3, 4, 5
El combobox de nombre: Antonio, David, Laura, Marcos, Pablo


Ahora bien, como dije, yo tengo una parte del codigo escrito, pero lo único que hace es cargar los datos y ordenarlos solamente según el ID, no el nombre. Os lo dejo por aqui por si os sirve de algo.

1
Imports MySql.Data.MySqlClient

1
2
3
Private MysqlCnn As New MySqlConnection
    Dim ds As New DataSet
    Dim da As MySqlDataAdapter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dim conexion As String = "server=localhost;database=clientes;user id=;port=3306;"
        Dim conn As New MySqlConnection(conexion)
 
        Dim Strsql As String
        Strsql = "SELECT * FROM tb_clientes ORDER BY id"
 
        da = New MySqlDataAdapter(Strsql, conn)
        ds = New DataSet
 
        Try
            da.Fill(ds)
 
            ComboBox1.DataSource = ds.Tables(0)
            ComboBox1.DisplayMember = "id"
            '"id" es el campo que quiero que muestren el combobox al ejecutar la aplicacion 
            ComboBox1.ValueMember = "id"
 
            ComboBox2.DataSource = ds.Tables(0)
            ComboBox2.DisplayMember = "nombre"
            '"nombre" es el campo que quiero que muestren el combobox al ejecutar la aplicacion 
            ComboBox2.ValueMember = "nombre"
        Catch ex As MySqlException
            'MsgBox(ex.Message.ToString)
            MsgBox("Error", MsgBoxStyle.Critical, "Error")
        End Try

Creo que no se me olvida nada más, cualquier cosa no tenéis nada más que decirmelo.
Muchas gracias de antemano a todos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ordenar consultas SQL en ComboBox

Publicado por Miguel (476 intervenciones) el 19/12/2016 21:35:46
Bueno, solo tienes que ordenar tu tabla (http://stackoverflow.com/questions/9107916/sorting-rows-in-a-data-table) y asignarla a cada ComboBox. Utiliza los eventos SelectedIndexChanged de los ComboBox para seleccionar el respectivo registro en el otro ComboBox (http://stackoverflow.com/questions/19390454/c-sharp-combobox-set-index-when-i-have-id); aquí hay que hacer validaciones simples para no caer en un bucle infinito con los eventos (ver si se seleccionó Id o Nombre al principio), y tampoco deben estar activos los eventos al inicio cuando agregas el origen de datos a los controles.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ordenar consultas SQL en ComboBox

Publicado por Mark (4 intervenciones) el 22/12/2016 11:29:17
Disculpa pero no he entendido muy bien lo que quieres hacer.

Recuerdo también que programo en VB.NET, no C#.


Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ordenar consultas SQL en ComboBox

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 21/12/2016 07:40:55
Pero si ya está solucionado, porque te complicas la vida?.

Llenas igual los 2 comboboxes.

Y en el primero le pones DisplayMember="Id"
y valueMember="ID"

en el segundo:

Displaymember="Nombre"
Valuemember="Id"

Listo, cuando selecciones un valor en el primer combobox, debes programar en el evento SelectionChangeCommited

Combobox2.selectedvalue=Convert.Toin32(combobox1.SelectedValue)

Y en el mismo evento del combobox2 lo inverso:

Combobox1.SelectedValue=Convert.toint32(Combobox2.SelectedValue)

Listo asunto arreglado.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ordenar consultas SQL en ComboBox

Publicado por Mark (4 intervenciones) el 22/12/2016 11:28:15
Hola, gracias por tu respuesta.

Eso que comentas ya está resuelto, el problema viene cuando quiero que ambos combobox (ComboBox1 y ComboBox2) estén ordenados alfabéticamente.
Actualmente, mediante un comando SQL se manda ordenar según el ID. Si mando que se ordene la columna de Nombres alfabéticamente, los números quedarán desordenados, por ejemplo quedaría algo así: 3, 2, 4, 5, 1 (los nombres lógicamente si quedarían ordenados, pero los números no).

Si trato de ordenar un ComboBox estableciendo la correspondiente propiedad de Sorting en True, los nombres se ordenan sólo visualmente. El número que se muestra en el ComboBox de ID es erróneo.

Mi duda por tanto no es que al pulsar un ComboBox, en el otro ComboBox se elija el ID/el nombre correspondiente, si no que ambos ComboBox queden ordenados ALFABÉTICAMENTE de forma que sea más fácil encontrar un número/nombre.

Gracias de nuevo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ordenar consultas SQL en ComboBox

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 22/12/2016 15:14:43
Bueno entendo tu duda.

Pero hay un problema que no estás entendiendo al parecer.

Si me dices que en tu tabla llamada por ejemplo empleados o usuarios, que tiene el campo ID y Nombre

Al momento de grabarlos en la tabla el ID 1 le corresponde a Juan y el ID 2 le corresponde a Andres., cuando ordenes alfabéticamente, siempre Andrés estará primero que Juan, por consiguiente el primer ID será el 2 y en segunda posicion estará el 1, ahora cómo pretendes odenar alfabéticamente y que los ID estén también en orden ascendente?, si cada usuario o empleado tiene un ID ya generado, así que cuando ordenes por ID, los nombre no quedarán en alfabético y cuando lo ordenes alfabéticamente los ID no estarán ordenados ascendentemente.

Ahora, lo que si puedes hacer es que puedes seleccionar los datos y ordenarlos ascendente por ID y asignarle al combobox1 y otra consulta ordenada alfabeticamente que será asignada al combobox2, pero cuando selecciones el ID=2 en el combobox1, seleccionará el primer elemento del combobox2, de esa manera si podrias seleccionar los IDs en el orden ascendente, pero en el combobox2 se posicionará en una posición diferente del combobox1, por lo motivos que ya te comenté.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ordenar consultas SQL en ComboBox

Publicado por Mark (4 intervenciones) el 22/12/2016 16:19:03
Gracias de nuevo por tu pronta respuesta.

He llegado a una solución, tal como me has propuesto en tu último mensaje (último párrafo), así lo hice. Resultó ser mas fácil de lo que yo pensaba.
Básicamente, a partir del código con el que empecé, he creado una nueva consulta SQL (que ordenará los nombres de forma ascendente) además de crear un nuevo "DataSet". Ambos los he asignado al Combobox2 y mediante tus códigos he podido "sincronizar" ambos Combobox (Combobox2.selectedvalue=Convert.Toin32(combobox1.SelectedValue) y Combobox1.SelectedValue=Convert.toint32(Combobox2.SelectedValue))

De nuevo, te agradezco el tiempo que te has tomado. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar