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

¿Cómo ordenar un combo box? (Correctamente))

Estas en el tema de ¿Cómo ordenar un combo box? (Correctamente)) en el foro de .NET en Foros del Web. Saludos a toda la comunidad, aunque esta pregunta pareciera ser rutinaria no lo es por lo siguiente tengo un combo box, el cual lleno por ...
  #1 (permalink)  
Antiguo 08/11/2012, 15:30
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta ¿Cómo ordenar un combo box? (Correctamente))

Saludos a toda la comunidad, aunque esta pregunta pareciera ser rutinaria no lo es por lo siguiente

tengo un combo box, el cual lleno por medio de una cosulta a SQL server y un dataset que luego se lo asigno al mismo combo box, por poner un ejemplo sencillo, tengo la siguiente tabla

Id Animal
1 Pato
2 Avestrus
3 Zebra

establezco como ValueMember el Id y como DisplayMember el campo Animal

la carga la hace si ningún problema puedo ver los animales en el combo , utilizo el la propiedad selected value para guardar los datos, propeidad la cual a su vez corresponde a los IDs que tengo en mi tabla,y todo lo guarda sin ningun problema

Ahora el problema:necesito que los datos se organicen de manera alfabética, para lo cual use 2 cosas:

1.- organizar directamente desde el query con order By
2.- Mover la propiedad Sorted del combo a True

la primera no me respetó el orden que le dí en la consulta, y la segunda me cambia los numeros del ValueMember es decir hace que los elementos del combo box queden de la siguiente manera

Id Animal
1 Avestrus
2 Pato
3 Zebra

cuando la tabla original es

Id Animal
1 Pato
2 Avestrus
3 Zebra

Me esta cambiando los valores de Pato y de Avestrus, es decir ordena bien los nombres pero me cambia por completo los ids de mis animales, alguien tiene un idea de como solucionar esto?,

Hasta ahora he probado hacerlo por medio de un llenado manual creando una clase para poder agregar el nuevo item dentro de un ciclo for sin mucho éxito ,
nota yo recuerdo que esto lo hacía en ASP.net con los DropDownList sin ningún problema, espero puedan ayudarme, saludos
  #2 (permalink)  
Antiguo 08/11/2012, 16:26
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: ¿Cómo ordenar un combo box? (Correctamente))

Hola

Regalanos la consulta con la cual listas la informacion.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #3 (permalink)  
Antiguo 08/11/2012, 16:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo ordenar un combo box? (Correctamente))

Que tal gracias por contestar,

Pues no tiene gran ciencia pero es la siguiente :

"SELECT ID,ANIMAL FROM ANIMALES ORDER BY ANIMAL"

para el llenado del combo box hago lo siguiente

utilizo 2 funciones la primera para obtener los datos del sql y la otra para asignarselos al combo

'funcion para recuperar datos de sql
Public Shared Function RecuperarDeSQL(ByVal Query As String, ByVal Conexion As String, Optional ByRef NumRegistros As Integer = 0) As DataSet
Dim Resultados As DataSet
Dim DA As SqlDataAdapter
Dim Con As SqlConnection
Try
Con = New SqlConnection(Conexion)
Con.Open()
DA = New SqlDataAdapter(Query, Con)
Resultados = New DataSet
DA.Fill(Resultados, "Resultado")
NumRegistros = Resultados.Tables(0).Rows.Count()
If NumRegistros = 0 Then
Resultados.Tables.Add()
'Resultados.Tables(0).Rows.Add()
Return Resultados
End If
Return Resultados
Con.Close()
DA = Nothing
Con = Nothing
Catch ex As Exception
End Try
Resultados = Nothing
Return Resultados
End Function

'FUncion para llenar el combo box

Public Sub LlenaCombo(ByRef Combo As ComboBox, ByVal CampoValor As String, ByVal CampoMostrar As String, ByVal Consulta As String, ByVal Conexion As String)
Dim DS As DataSet
DS = RecuperarDeSQL(Consulta, Conexion)
Combo.DataSource = DS.Tables(0)
Combo.DisplayMember = CampoMostrar
Combo.ValueMember = CampoValor
End Sub


saludos


Y se utiliza de la siguiente forma:
LlenaCombo(Me.Combo,"ID","Animal","SELECT ID,ANIMAL FROM ANIMALES ORDER BY ANIMAL")

Última edición por Cristo_; 08/11/2012 a las 16:43 Razón: Agregado de información
  #4 (permalink)  
Antiguo 12/11/2012, 11:33
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Sonrisa Respuesta: ¿Cómo ordenar un combo box? (Correctamente))

Mis amigos Epic Fail!!!

Encontré que de igual forma vualve a hacer la carga de datos en el evento drop down, pero en esa carga no tiene el orden por lo cual, por mas que lo ordenara al momento de cargarlo;si lo abría se desordenaba por el evento Drop Down , de cualquier forma muchas gracias a la camunidad, saludos
  #5 (permalink)  
Antiguo 13/11/2012, 07:34
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: ¿Cómo ordenar un combo box? (Correctamente))

Tienes dos post con el mismo tema?

Acabo de sacar el rato para mirar tu codigo, la verdad antes no lo hice porque la forma en que lo pegaste me daba pereza, me obliga a abrir visual studio para poder pegarlo y leerlo de forma mas amigable:

Código VB.NET:
Ver original
  1. Dim Resultados As DataSet
  2.         Dim DA As SqlDataAdapter
  3.         Dim Con As SqlConnection
  4.         Try
  5.             Con = New SqlConnection(Conexion)
  6.             Con.Open()
  7.             DA = New SqlDataAdapter(Query, Con)
  8.             Resultados = New DataSet
  9.             DA.Fill(Resultados, "Resultado")
  10.             NumRegistros = Resultados.Tables(0).Rows.Count()
  11.             If NumRegistros = 0 Then
  12.                 Resultados.Tables.Add()
  13.                 'Resultados.Tables(0).Rows.Add()
  14.                 Return Resultados
  15.             End If
  16.             Return Resultados
  17.             Con.Close()
  18.             DA = Nothing
  19.             Con = Nothing
  20.         Catch ex As Exception
  21.         End Try
  22.         Resultados = Nothing
  23.         Return Resultados

Hay un par de lineas con las que YO no estoy de acuerdo y son las siguientes:

Código VB.NET:
Ver original
  1. NumRegistros = Resultados.Tables(0).Rows.Count()

Para que asignar el RowCount a una variable si puede hacer la pregunta directamente asi:

Código VB.NET:
Ver original
  1. If Resultados.Tables(0).Rows.Count() = 0 Then


Y lo veo raro es porque 2 linas antes hacer el DA.Fill(Resultados, "Resultado") por lo cual creo que se hace inecesario agregar la tabla, sabiendo que el fill ya la agrego y lleno.

Y encuando al Return solo pondria y tu funcion me quedaria mas o menos asi (los parametros siguen iguales ya que no se que logica de negocio usas):

Código VB:NET:
Ver original
  1. Public Shared Function RecuperarDeSQL(ByVal Query As String, ByVal Conexion As String, Optional ByRef NumRegistros As Integer = 0) As DataSet
  2.         Dim Resultados As DataSet
  3.         Dim DA As SqlDataAdapter
  4.         Dim Con As SqlConnection
  5.  
  6.         Con = New SqlConnection(Conexion)
  7.  
  8.         Try
  9.             Con.Open()
  10.             DA = New SqlDataAdapter(Query, Con)
  11.             Resultados = New DataSet
  12.             DA.Fill(Resultados, "Resultado")
  13.  
  14.             If Resultados.Tables.Count() = 0 Then
  15.                 Resultados.Tables.Add()
  16.             End If
  17.  
  18.             DA = Nothing
  19.             Con = Nothing
  20.         Catch ex As Exception
  21.  
  22.         Finally
  23.             Con.Close()
  24.         End Try
  25.  
  26.         Return Resultados
  27.     End Function

Como puedes ver, cambien la linea de la condicion donde preguntas si hay registros para agregar una tabla, me imagino que necesitas retornar una en blanco, ahora pregunto Si el numero de tablas es igual a 0 la agregamos.

Y la conexion se cierra en el Finally del Try esta seccion se ejecuta siempre, haya o no un error previo, eso asegura que la conexion siempre se cierre y no quede abierta por si algo ocurre antes de llegar a esa, como estaba antes.

Tambien elimine la linea Resultados = Nothing para que borrarla si necesitas retornarla?

Fijates si las modficaciones realizadas ayudan a solucionar el problema y me comentas.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)

Última edición por jhonwilliams; 13/11/2012 a las 07:39
  #6 (permalink)  
Antiguo 13/11/2012, 14:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo ordenar un combo box? (Correctamente))

Que tal amigo gracias por el tiempo que te tomaste en contestar , te contesto sobre tus lineas de la siguiente forma :

1.-"la forma en que lo pegaste me daba pereza, me obliga a abrir visual studio"
Lo siento desconozco la forma correcta , disculpa
2.-"Para que asignar el RowCount a una variable si puede hacer la pregunta directamente asi"
Por que es una funcion y la variable es por referencia, sirve para que puedas visulazarla en cualquier textbox, label o variable de tu preferencia

3.-"Y lo veo raro es porque 2 linas antes hacer el DA.Fill(Resultados, "Resultado") por lo cual creo que se hace inecesario agregar la tabla, sabiendo que el fill ya la agrego y lleno."
Te sere sincero, este código lo baje de internet y me sirvió así como venía, la verdad que por la premura no he tenido tiempo de revisarlo a fondo

4.-"Como puedes ver, tambien la linea de la condicion donde preguntas si hay registros para agregar una tabla, me imagino que necesitas retornar una en blanco, ahora pregunto Si el numero de tablas es igual a 0 la agregamos"
Aquí no entendí nada, pero reitero lo del código que encontré en internet

5.-"Y encuando al Return solo pondria y tu funcion me quedaria mas o menos asi (los parametros siguen iguales ya que no se que logica de negocio usas)"
No se a que te refieras con "no se que logica de negocio usas"

6.-"Tambien elimine la linea Resultados = Nothing para que borrarla si necesitas retornarla?"
Como podras ver esa línea se encuentra despues del try catch y en una ejecución normal no pasa por allí

Saludos.
  #7 (permalink)  
Antiguo 13/11/2012, 14:49
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: ¿Cómo ordenar un combo box? (Correctamente))

Para no seguir recalcando sobre el mismo punto 1, mira el siguiente enlace que está como principales en el Foro para la facilitación de la lectura de código mediante los códigos Geishi para scripts a color en FDW, y que ésta las puedes ver en un combo que dice Highlight sobre el menú en el cual haces un nuevo post o comentario. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #8 (permalink)  
Antiguo 13/11/2012, 16:34
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: ¿Cómo ordenar un combo box? (Correctamente))

Hola

Cuando te hablo de la "logica del negocio" en la necesidad que tienes de hacer algo con comodigo, es como el porque de hacer una fucion o metodo, cual es el objetivo que esta debe de cumplir.

Revisa si la funcion modifique te funciona.

Que motor de base de datos usas?

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)

Etiquetas: box, combo, server, sql, tabla
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 10:05.