La Web del Programador: Comunidad de Programadores
 
    Pregunta:  58226 - COMO ENLAZAR 3 COMBOBOX CON DATOS RELACIONADOS DE BD VB2005
Autor:  Jesus Bautista Rodriguez
Hola a todos
estoy empezando a aprender visual basic 2005, y estoy tratando de hacer una aplicaion
donde necesito relacionar 3 ComboBox con datos relacionadosa de una base de datos de sql server express 2005, he buscado informacion pero solo encuentro para elnlazar 2 combobox. La tablas estan relacionadas de esta forma:

Es de venta de articulos:

Tabla Articulo:
ArticuloID - llave primaria
Nom_Articulo
Imagen

Tabla Marcas:
MarcaID - llave primaria
Nom_Marca
ArticuloID - Relacion

Tabla Modelos:
ModeloID - llave primaria
Nom_Modelo
Precio
MarcaID - Relacion

Lo que yo intento hacer es que cuando seleccione un Articulo en el primer combo, me aparescan sus respectivas marcas en el segundo combo; entonces de las Marcas que aparescan, al seccionar una me aparescan sus respectivos Modelos en el tercer combo.
He podido relacionar Articulos y Marcas pero no con Modelos.

Para los 2 combos lo he echo en un ambiente desconectado(DataSet) y agregando los datos de la tabla al combo(item) de Articulos por filas(Row) , creo un DataRelation y obtengo las Marcas con un GetChilden.
Pero no import la forma.

Les agradesco de antemano la ayuda que puedan dar. Gracias

  Respuesta:  abel montalvo
Supongamos que tienes tres combos

Public Class Form1

Dim DT1 As DataTable = New DataTable("DT1")
Dim DT2 As DataTable = New DataTable("DT2")
Dim DT3 As DataTable = New DataTable("DT3")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

DT1.Columns.Add(New DataColumn("Tabla1_ID", GetType(System.String)))
DT1.Columns.Add(New DataColumn("Tabla1_Valor", GetType(System.String)))
DT1.Columns.Add(New DataColumn("Tabla1_Valor2", GetType(System.String)))
DT1.Rows.Add("1", "valor1", "valor2")
DT1.Rows.Add("2", "valor3", "valor4")

DT2.Columns.Add(New DataColumn("Tabla2_ID", GetType(System.String)))
DT2.Columns.Add(New DataColumn("Tabla1_ID", GetType(System.String)))
DT2.Columns.Add(New DataColumn("Tabla2_Valor", GetType(System.String)))
DT2.Rows.Add("3", "1", "valor5")
DT2.Rows.Add("4", "1", "valor6")
DT2.Rows.Add("5", "2", "valor7")

DT3.Columns.Add(New DataColumn("Tabla3_ID", GetType(System.String)))
DT3.Columns.Add(New DataColumn("Tabla2_ID", GetType(System.String)))
DT3.Columns.Add(New DataColumn("Tabla3_Valor", GetType(System.String)))
DT3.Rows.Add("6", "3", "valor8")
DT3.Rows.Add("7", "3", "valor9")
DT3.Rows.Add("8", "3", "valor10")
DT3.Rows.Add("9", "4", "valor11")


ComboBox1.DataSource = DT1
ComboBox1.DisplayMember = "Tabla1_Valor"
ComboBox1.ValueMember = "Tabla1_ID"
End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim DT As DataTable = DT2.Clone
For Each elemento In DT2.Select("Tabla1_ID = '" + ComboBox1.SelectedValue.ToString + "'")
DT.ImportRow(elemento)
Next
ComboBox2.DataSource = DT
ComboBox2.DisplayMember = "Tabla2_Valor"
ComboBox2.ValueMember = "Tabla2_ID"
End Sub

Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
Dim DT As DataTable = DT3.Clone
For Each elemento In DT3.Select("Tabla2_ID = '" + ComboBox2.SelectedValue.ToString + "'")
DT.ImportRow(elemento)
Next
ComboBox3.DataSource = DT
ComboBox3.DisplayMember = "Tabla3_Valor"
ComboBox3.ValueMember = "Tabla3_ID"
End Sub
End Class