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

comboBox metodo SelectedIndexChanged

Estas en el tema de comboBox metodo SelectedIndexChanged en el foro de .NET en Foros del Web. Hola, tengo la siguiente situación, cargo un comboBox de una query este es parte del código. comboBox1.ValueMember = "COD_PLANDESC"; comboBox1.DisplayMember = "DES_PLANDESC"; comboBox1.DataSource = dtF.DataSet.Tables["Table"]; ...
  #1 (permalink)  
Antiguo 26/02/2007, 15:20
 
Fecha de Ingreso: febrero-2007
Mensajes: 2
Antigüedad: 17 años, 2 meses
Puntos: 0
De acuerdo comboBox metodo SelectedIndexChanged

Hola, tengo la siguiente situación, cargo un comboBox de una query este es parte del código.

comboBox1.ValueMember = "COD_PLANDESC";
comboBox1.DisplayMember = "DES_PLANDESC";
comboBox1.DataSource = dtF.DataSet.Tables["Table"];
comboBox1.SelectedIndex = -1;

El problema se presenta con estas líneas:

comboBox1.DataSource = dtF.DataSet.Tables["Table"];
comboBox1.SelectedIndex = -1;

por cada una de ellas se ejecuta el metodo SelectedIndexChanged del objeto, lo cual hace que la aplicación se demore mas de lo normal debido que ejecuta todo el codigo del metodo. La verdad es que esto lo podria solucionar incorporando una variable de control pero esto no me soluciona el problema solo lo atenua . existe alguna forma mas eficiente para controlar esta situación

gracias.

PD Estoy recien entrando en el mundo del net.
  #2 (permalink)  
Antiguo 26/02/2007, 16:07
Avatar de ing_aprendiz  
Fecha de Ingreso: septiembre-2005
Mensajes: 136
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: comboBox metodo SelectedIndexChanged

hola estoy haciendo algo similar solo que necesito que los combos sean anidados, de todas formas para un solo combo lo puedes hacer con una clase y luego la implementas en el formulario, mira de la siguiente manera:

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class CargarLista

Public Shared cadenaConexion As String = "Data Source=(local); Initial Catalog=pruebaClases; Integrated Security=yes;"

' declaro la clase Carga, para solo ser usada dentro de la clase CargarLista
Private Class Carga
' declaro la variable que uso para asignar o obtener el valor del Codigo
' es de tipo object porque el valor puede ser un valor numérico o alfanumérico
Private mCodigo As Object
' declaro la variable que uso para asignar o obtener el valor de la Descripción
Private mDescripcion As String

' declaro la propiedad Codigo de la clase Carga
Public Property Codigo() As Object
Get
Return mCodigo
End Get
Set(ByVal Value As Object)
mCodigo = Value
End Set
End Property

' declaro la propiedad Descripcion de la clase Carga
Public Property Descripcion() As String
Get
Return mDescripcion
End Get
Set(ByVal Value As String)
mDescripcion = Value
End Set
End Property

' declaro el método New de la clase Carga
Public Sub New(ByVal InitCodigo As Object, ByVal InitDescripcion As String)
mCodigo = InitCodigo
mDescripcion = InitDescripcion
End Sub
End Class

' la función DatosLista es pública y sirve para llenar la carga de objetos de listas
Public Function DatosLista(ByVal DataTable As DataTable, ByVal Objeto As Object, _
ByVal Codigo As String, ByVal Descripcion As String)
' declaro la matriz de tipo ArrayList, dimensionandola a la cantidad de registros de la tabla
Dim Array As New ArrayList(DataTable.Rows.Count)
' declaro la variable como tipo DataRow
Dim Registro As DataRow

' asigno a la propiedad DisplayMember el Nombre del campo vinculado del ArrayList
Objeto.DisplayMember = "Descripcion"
' asigno a la propiedad ValueMember el Nombre del campo vinculado del ArrayList
Objeto.ValueMember = "Codigo"

' deshabilita la actualización en pantalla del control enviado cpmo parámetro (Objeto)
Objeto.BeginUpdate()

' recorro la Table, registro por registro
For Each Registro In DataTable.Rows
' agrego un nuevo registro dentro del ArrayList
Array.Add(New Carga(Registro(Codigo), Trim(Registro(Descripcion))))
Next
' asigno al DataSource del control enviado como parámetro el ArrayList
Objeto.DataSource = Array

' habilita la actualización en pantalla del control enviado como parámetro (Objeto)
Return Objeto.EndUpdate()
End Function
End Class

luego lo implementas en el form así, haciendo una funcion ( en este ejemplo esta para listar los nombres de los paises):


Public all As New CargarLista
Public Sub cargaList()

Dim da As SqlDataAdapter
Dim oDataSet As New DataSet
Dim dt As New DataTable("country")
Dim CadenaSelect As String = "SELECT * FROM country
da = New SqlDataAdapter(CadenaSelect, cargarLista.cadenaConexion)
da.Fill(oDataSet, "country")
dt = oDataSet.Tables("country")
all.DatosLista(dt, cb1, "nIdCountry", "cName")
End Sub

luego lo llamas en el evento onload del form

Private Sub entrar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cargaList()
End Sub

de esta manera te listara lo que quieres además funciona para cualquier tabla que maneje dos campos id, description

espero te sirva
chao
  #3 (permalink)  
Antiguo 27/02/2007, 07:38
Avatar de .seb  
Fecha de Ingreso: marzo-2006
Ubicación: Uruguay
Mensajes: 493
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: comboBox metodo SelectedIndexChanged

Si esa solución funciona es muy buena...
Yo en su momento lo había implementado poniendo una variable booleana que setaba en true solo al terminar de cargar el combo. Y en el evento del combo solo entro si la variable me lo permite (está en true)
__________________
saludos
seba
http://sgomez.blogspot.com
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 06:26.