Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/02/2007, 16:07
Avatar de ing_aprendiz
ing_aprendiz
 
Fecha de Ingreso: septiembre-2005
Mensajes: 136
Antigüedad: 18 años, 8 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