En este ejemplo vamos a ver cómo anidar varias combobox de manera que cargada la combo inicial, se carga una segunda combo tomando el valor elegido en la primera como parámetro de búsqueda para la segunda combo y así sucesivamente hasta la última.
En el caso de la la última combobox en vez de otra combo se cargará un listbox a partir del cual seleccionaremos uno, varios o ningún valor con botones de selección simple o múltiple.
En el ejemplo particular la primera combo cargará una lista de países, la segunda una lista de dominios que dependerá de cada país, por ejemplo, al seleccionar Francia en los dominios puede aparecer Tahití, Guayana, etc.
A partir de cada Dominio se cargará un combo con los subdominios ( P. ej. provincias de cada dominio). El Ownership será la lista de responsables de cada territorio, Entidad Conceptual. será la lista de entidades a cargo de cada Ownership, (Por ejemplo, Carreteras, Sanidad, Educación) y finalmente Entidad de Explotación. será la lista de entidades derivadas de cada entidad principal. Por ejemplo si elegimos educación podemos tener Escuelas, Universidades, Institutos de investigación, etc.
Para realiza este ejemplo abrimos un proyecto de visual Basic y dibujamos un formulario como este:
Una vez creado el formulario añadimos código para cargar la primera combo. Como hay varias creamos un procedimiento sub genérico para cargar combos de este estilo.
Private Sub Cargacombo(ByVal strSelect As String, ByVal cboGenerica As ComboBox, Optional ByVal strParametro As String = "")
Dim srSQL As IO.StreamReader
Dim strConsulta As String
Dim rsSQL As New ADODB.Recordset
Dim dicGenerico As New Dictionary(Of String, String)
Dim cmdPG As OleDb.OleDbCommand
Dim dv As New DataView
Dim oPar As OleDb.OleDbParameter
Dim dA As New OleDb.OleDbDataAdapter
If Not DS Is Nothing Then
DS.Clear()
End If
DS
= New DataSet
srSQL = New
System.IO.StreamReader(strStartupPath & strSelect)
strConsulta
= srSQL.ReadToEnd
If cnxPD.State
<> ConnectionState.Open Then
cnxPD.Open()
End If
cmdPG = New
OleDb.OleDbCommand(strConsulta, cnxPD)
oPar = cmdPG.Parameters.Add("?", OleDb.OleDbType.VarChar,
50)
oPar.Value = strParametro
dA.SelectCommand = cmdPG
dA.Fill(DS, "CARGACOMBO")
cboGenerica.Items.Clear()
dicGenerico.Clear()
dv = DS.Tables("CARGACOMBO").DefaultView
For Each drv As DataRowView In dv
If Not dicGenerico.ContainsKey(drv(0)) Then
dicGenerico.Add(drv(0), drv(1))
End If
'almacenamos
los valores junto con su clave
cboGenerica.Items.Add(New AddItem(drv(1), drv(0)))
Next
End Sub
Este procedimiento toma como parámetros una cadena con la SELECT con la que se cargará el combo y el objeto de tipo combo a cargar. Ahora cargamos la primera combo desde el evento Load de la aplicación.
Private Sub
frmListBox_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cboPais.Items.Clear()
cboPais.Text = ""
Cargacombo("\CargarPaises.sql", cboPais)
btnAceptar.Enabled = False
End Sub
La SELECT necesaria para la carga y llamada desde "\CargarPaises.sql" es un módulo de texto .sql asociado al proyecto.
Y contiene la SELECT.
select COD_CAMPO,DES_CAMPO from PROPIETARIO.TABLA1
Una vez carga el primer combo (en nuestro caso un combo de países) , al elegir un país toma el valor elegido como parámetro para la siguiente SELECT. El código que va en el evento SelectedIndexChanged del combo países es el siguiente:
Private Sub
cboPais_SelectedIndexChanged(sender As Object, e As EventArgs) Handles
cboPais.SelectedIndexChanged
cboDominio.Items.Clear()
cboDominio.Text = ""
cboSubdominio.Items.Clear()
cboSubdominio.Text = ""
cboOwner.Items.Clear()
cboOwner.Text = ""
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
Cargacombo("\CargarDominios.sql", cboDominio, DirectCast(Me.cboPais.SelectedItem,
AddItem).Clave.ToString())
btnAceptar.Enabled = False
End Sub
La llamada al objeto AddItem la hemos definido previamente como una clase que nos permite guardar un diccionario clave-valor, (en este caso clave-nombre).
'Esta
clase AddItem permite almacenar un diccionario clave-valor en un combobox
Public Class AddItem
Private moClave As Object
Private msNombre As String
Public Sub New(ByVal Nombre As String, ByVal Clave As Object)
msNombre = Nombre
moClave = Clave
End Sub
Public Property
Clave() As Object
Get
Return moClave
End Get
Set(ByVal Value As Object)
moClave = Value
End Set
End Property
Public Property Nombre() As String
Get
Return
msNombre
End Get
Set(ByVal Value As String)
msNombre = Value
End Set
End Property
Public Overrides Function ToString() As String
Return msNombre
End Function
End Class
Al seleccionar un país, se rellena el combo de dominios tomando como parámetro el país elegido en la combo. Me.cboPais.SelectedItem el parámetro se pasa haciendo uso de la clase addItem de este modo:
DirectCast(Me.cboPais.SelectedItem,
AddItem).Clave.ToString()
Una vez rellenado el combo de dominio se procede del mismo modo con el resto de combos, el siguiente es el de subDominio.
Private Sub
cboSubdominio_SelectedIndexChanged(sender As Object, e As EventArgs) Handles
cboSubdominio.SelectedIndexChanged
cboOwner.Items.Clear()
cboOwner.Text = ""
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
lstEntExpl.Items.Clear()
frmNiveles.Cargacombo("\CargarOwnership.sql", cboOwner, DirectCast(Me.cboSubdominio.SelectedItem,
AddItem).Clave.ToString())
End Sub
Se puede ver que la estructura es la misma, al llamar a una función genérica nos ahorramos escribir nuevo código cada vez y lo único que cambiamos es la llamada a archivo .sql
Procedemos de la misma forma con el resto de combos hasta el último. Si la select puede ser la misma para varios combos se aprovechará el archivo .sql. En nuestro caso el combo de Entidad Conceptual se rrelena utilizando la misma SELECT que se utilizó para rellenar el Owner.
Private Sub
cboOwner_SelectedIndexChanged(sender As Object, e As EventArgs) Handles
cboOwner.SelectedIndexChanged
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
Cargacombo("\CargarOwnership.sql", cboEntConceptual, DirectCast(Me.cboOwner.SelectedItem,
AddItem).Clave.ToString())
End Sub
Para que esto sea posible, la SELECT ( y la tabla) son de este tipo:
select COD_CAMPO,DES_CAMPO from PROPIETARIO.TABLA where COD_CAMPO = ?
Esto es posible si en una tabla, el campo COD_CAMPO contiene códigos para varias descripciones, es decir en nuestro caso particular prodríamos tener la tabla rellena con códigos del estilo OW0001, OW0002 para el Owner y EC0001, EC0002 para la entidad conceptual. Si no es el caso deberemos utilizar otro archivo .sql diferente con la SELECT correspondiente.
Para ver otra posibilidad, la entidad específica en vez de cargarse en un combo, la cargaremos en dos ListBox,con los correspondientes botones para traspasar la entidad elegida al listbox de muestra al de ejecución y viceversa (ver la primera imagen de esta entrada) para ello en el evento IndexChanged del ultimo combo hacemos:
Private Sub cboEntConceptual_SelectedIndexChanged(sender
As Object, e As EventArgs) Handles
cboEntConceptual.SelectedIndexChanged
Me.Cursor = Cursors.WaitCursor
If Proceso =
TipoProceso.BuscarInformacionSophia Then
CargarListaEntExplotacion()
Else
Exit Sub
End If
Me.Cursor =
Cursors.Default
End Sub
Y el procedimiento que carga el primer ListBox con CargarListaEntExplotacion() vendrá definido de este modo.
Sub
CargarListaEntExplotacion()
Dim srSQL As IO.StreamReader
Dim strConsulta As String
Dim rsSQL As New ADODB.Recordset
Dim cmdPG As
OleDb.OleDbCommand
Dim dv As New DataView
Dim oPar As
OleDb.OleDbParameter
Dim dA As New
OleDb.OleDbDataAdapter
If DS Is Nothing Then
Exit Sub
End If
If
cboEntConceptual.Text = "" Then
Exit Sub
End If
lstEntExplotacion.Items.Clear()
If Not DS.Tables("ENTEXPL") Is Nothing Then
DS.Tables("ENTEXPL").Clear()
End If
EscribirLog("Generando
Diccionario Entidad Explotacion - " & Now.ToString("dd/MM/yyyy
HH:mm:ss"))
srSQL
= New
System.IO.StreamReader(strStartupPath & "\CargarEntExplotacion.sql")
strConsulta = srSQL.ReadToEnd
'Añado la consulta
If cnxPD.State <> ConnectionState.Open Then
cnxPD.Open()
End If
cmdPG = New
OleDb.OleDbCommand(strConsulta, cnxPD)
oPar = cmdPG.Parameters.Add("?", OleDb.OleDbType.VarChar, 50)
oPar.Value = DirectCast(Me.cboEntConceptual.SelectedItem,
AddItem).Clave.ToString()
dA.SelectCommand = cmdPG
dA.Fill(DS, "ENTEXPL")
lstSeleccion.Items.Clear()
dv = DS.Tables("ENTEXPL").DefaultView
For Each drv As
DataRowView In dv
lstEntExplotacion.Items.Add(drv(1)
& drv(0))
Next
End Sub
La select de la carga del combo entidad explotación es esta, COD_ENTEXPL es el código de la entidad de explotación, DES_ENTEXPL es la descripción y COD_ENTCON es el código de la Entidad Conceptual:
select COD_ENTEXPL,DES_ENTEXPL from PROPIETARIO.TABLA1 where COD_ENTCON = ?
Este procedimiento carga un diccionario clave,valor con el código y la descripción de las entidades de explotación y el listbox con las descripciones y el código.
Ahora hay que definir los botones del centro, el primer botón > traspasa los elementos elegidos en la primera ListBox (lstEntExplotacion) a la segunda (lstSeleccion). El código comentado en verde sería por si deseamos mostrar las descripciones junto con sus códigos.
Private Sub
btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Dim EntExpl
' Dim EntCodigos
Dim ilstEntExpl As New List(Of String)
Dim iEnum As IEnumerator
For Each EntExpl In
lstEntExplotacion.SelectedItems
lstSeleccion.Items.Add(EntExpl)
ilstEntExpl.Add(EntExpl)
Next
iEnum = ilstEntExpl.GetEnumerator
While iEnum.MoveNext
lstEntExplotacion.Items.Remove(iEnum.Current)
End While
'Repito con códigos
'Dim EntCodigos
'Dim ilstCodigos As New List(Of String)
'Dim iEnucod As IEnumerator
'For Each EntCodigos In lstCodigos.SelectedItems
' lstElegidos.Items.Add(EntCodigos)
' ilstCodigos.Add(EntCodigos)
'Next
'iEnucod =
ilstCodigos.GetEnumerator
'While iEnum.MoveNext
'
lstCodigos.Items.Remove(iEnucod.Current)
'End While
'Fin repito con codigos
If lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
El siguiente botón >> traspasa todos los elementos de la lista a la de seleccionados.
Private Sub
btnAddAll_Click(sender As Object, e As EventArgs) Handles btnAddAll.Click
Dim Entexpl
Dim ilstEntExpl As New List(Of String)
Dim iEnum As IEnumerator
For Each Entexpl In
lstEntExplotacion.Items
lstSeleccion.Items.Add(Entexpl)
ilstEntExpl.Add(Entexpl)
Next
iEnum
= ilstEntExpl.GetEnumerator
While iEnum.MoveNext
lstEntExplotacion.Items.Remove(iEnum.Current)
End While
If
lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
El siguiente botón < elimina un elemento de los seleccionados y lo traspasa a la lista inicial.
Private Sub
btnDel_Click(sender As Object, e As EventArgs) Handles btnDel.Click
Dim EntExpl
Dim ilstEntexpl As New List(Of String)
Dim iEnum As IEnumerator
For Each EntExpl In
lstSeleccion.SelectedItems
lstEntExplotacion.Items.Add(EntExpl)
ilstEntexpl.Add(EntExpl)
Next
iEnum = ilstEntexpl.GetEnumerator
While iEnum.MoveNext
lstSeleccion.Items.Remove(iEnum.Current)
End While
If
lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
Finalmente el botón << elimina todos los elementos seleccionados y los traspasa a la lista inicial.
Private Sub
btnDelAll_Click(sender As Object, e As EventArgs) Handles btnDelAll.Click
Dim EntExpl
Dim ilstEntExpl As New List(Of String)
Dim iEnum As IEnumerator
For Each EntExpl In
lstSeleccion.Items
lstEntExplotacion.Items.Add(EntExpl)
ilstEntExpl.Add(EntExpl)
Next
iEnum = ilstEntExpl.GetEnumerator
While iEnum.MoveNext
lstSeleccion.Items.Remove(iEnum.Current)
End While
If
lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
Cuando terminamos de seleccionar todos los elementos de los combos y del listbox de selección pulsamos el botón aceptar y tratamos los valores elegidos como deseemos.
Private Sub
btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
Dim sCodEntExpl As String = ""
If
lstSeleccion.Items.Count <> 0 Then
For Each strEntExpl In
lstSeleccion.Items
sCodEntExpl = sCodEntExpl & strEntExpl & "-"
Next
sCodEntExpl = Mid(sCodEntExpl, 1, Len(sCodEntExpl) - 1)
End If
var1 = cboPais.SelectedValue
var2 = cboDominio.SelectedValue
var3 = cboSubdominio.SelectedValue
var4 = cboOwner.SelectedValue
var5 = cboEntConceptual.SelectedValue
End
End Sub
Combos selección con DataGridView
En vez de dos ListBox con los valores a elegir mediante unos botones de selección-deselección, podemos sustituirla por un dataGridView.
En la figura inferior, hemos sustituido los dos ListBox por un dataGridView. Este dataGrid se carga con la lista de valores de la que podemos elegir una o varias filas con el ratón.
Lo único que cambia en esta pantalla es la función de carga CargarListaEntExplotacion.
Sub
CargarListaEntExplotacion()
Dim srSQL As IO.StreamReader
Dim strConsulta As String
Dim rsSQL As New ADODB.Recordset
Dim cmdPG As
OleDb.OleDbCommand
Dim dv As New DataView
Dim oPar As
OleDb.OleDbParameter
Dim dA As New
OleDb.OleDbDataAdapter
Dim drFila As DataRow
If DS Is Nothing Then
Exit Sub
End If
If
cboEntConceptual.Text = "" Then
Exit Sub
End If
If Not DS.Tables("ENTEXPL") Is Nothing Then
DS.Tables("ENTEXPL").Clear()
End If
EscribirLog("Generando
Diccionario Entidad explotacion - " & Now.ToString("dd/MM/yyyy
HH:mm:ss"))
srSQL
= New
System.IO.StreamReader(strStartupPath & "\CargarEntExplotacion.sql")
strConsulta = srSQL.ReadToEnd
'Añado la consulta
If cnxPD.State <> ConnectionState.Open Then
cnxPD.Open()
End If
cmdPG = New
OleDb.OleDbCommand(strConsulta, cnxPD)
oPar = cmdPG.Parameters.Add("?", OleDb.OleDbType.VarChar, 50)
oPar.Value = DirectCast(Me.cboEntConceptual.SelectedItem,
AddItem).Clave.ToString()
dA.SelectCommand = cmdPG
dA.Fill(DS, "ENTEXPL")
dv
= DS.Tables("ENTEXPL").DefaultView
grdEntExpl.DataSource = DS.Tables("ENTEXPL").DefaultView
grdEntExpl.Columns(0).MinimumWidth = 70
grdEntExpl.Columns(1).MinimumWidth = 400
grdEntExpl.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
grdEntExpl.Columns(0).HeaderText
= "Codigo"
grdEntExpl.Columns(1).HeaderText = "Entidad de
Explotación"
lstEntExpl.Items.Clear()
For Each drFila In DS.Tables("ENTEXPL").Rows
lstEntExpl.Items.Add(drFila(0) & " - " & drFila(1))
Next
End Sub
Y la funcionalidad del Botón aceptar.
Private Sub
btnAceptar_Click(sender As Object, e As EventArgs) Handles
btnSeleccionar.Click
Dim sCodEntExpl As String = ""
Dim ILst
Dim aEntExpl() As String
Dim i As Int16
For Each rowGrid In
grdEntExpl.SelectedRows
sCodEntExpl = sCodEntExpl & grdEntExpl.SelectedRows.Item(i).Cells(0).Value
& "-"
Next
If sCodEntExpl
<> "" Then
sCodEntExpl = Mid(sCodEntExpl, 1, Len(sCodEntExpl) - 1)
End If
End
End Sub
Finalmente se muestra el código completo. (de la versión de los dos ListBox)
Public Class frmCombos
Dim strCarpeta As String
Private Sub
btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
Dim sCodEntExpl As String = ""
If
lstSeleccion.Items.Count <> 0 Then
For Each strEntExpl In
lstSeleccion.Items
sCodEntExpl = sCodEntExpl & strEntExpl & "-"
Next
sCodEntExpl = Mid(sCodEntExpl, 1, Len(sCodEntExpl) - 1)
End If
var1 = cboPais.SelectedValue
var2 = cboDominio.SelectedValue
var3 = cboSubdominio.SelectedValue
var4 = cboOwner.SelectedValue
var5 = cboEntConceptual.SelectedValue
End
End Sub
Private Sub
cboPais_SelectedIndexChanged(sender As Object, e As EventArgs) Handles
cboPais.SelectedIndexChanged
cboDominio.Items.Clear()
cboDominio.Text = ""
cboSubdominio.Items.Clear()
cboSubdominio.Text = ""
cboOwner.Items.Clear()
cboOwner.Text = ""
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
Cargacombo("\CargarDominios.sql", cboDominio, DirectCast(Me.cboPais.SelectedItem,
AddItem).Clave.ToString())
btnAceptar.Enabled = False
End Sub
Private Sub
frmHistoriaUsuario_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cboPais.Items.Clear()
cboPais.Text = ""
Cargacombo("\CargarPaises.sql", cboPais)
btnAceptar.Enabled
= False
End Sub
Private Sub
cboDominio_SelectedIndexChanged(sender As Object, e As
EventArgs) Handles
cboDominio.SelectedIndexChanged
cboSubdominio.Items.Clear()
cboSubdominio.Text = ""
cboOwner.Items.Clear()
cboOwner.Text = ""
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
Cargacombo("\CargarSubDominios.sql", cboSubdominio, DirectCast(Me.cboDominio.SelectedItem,
AddItem).Clave.ToString())
btnAceptar.Enabled = True
End Sub
Private Sub
cboSubdominio_SelectedIndexChanged(sender As Object, e As
EventArgs) Handles
cboSubdominio.SelectedIndexChanged
cboOwner.Items.Clear()
cboOwner.Text = ""
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
Cargacombo("\CargarOwnership.sql", cboOwner, DirectCast(Me.cboSubdominio.SelectedItem,
AddItem).Clave.ToString())
End Sub
Private Sub
cboOwner_SelectedIndexChanged(sender As Object, e As EventArgs) Handles
cboOwner.SelectedIndexChanged
cboEntConceptual.Items.Clear()
cboEntConceptual.Text = ""
cboEntExplotacion.Items.Clear()
cboEntExplotacion.Text = ""
Cargacombo("\CargarOwnership.sql", cboEntConceptual, DirectCast(Me.cboOwner.SelectedItem,
AddItem).Clave.ToString())
End Sub
Private Sub
cboEntConceptual_SelectedIndexChanged(sender As Object, e As
EventArgs) Handles
cboEntConceptual.SelectedIndexChanged
Me.Cursor = Cursors.WaitCursor
If Proceso =
TipoProceso.BuscarInformacionSophia Then
CargarListaEntExplotacion()
Else
Exit Sub
End If
Me.Cursor =
Cursors.Default
End Sub
Sub
CargarListaEntExplotacion()
Dim srSQL As IO.StreamReader
Dim strConsulta As String
Dim rsSQL As New ADODB.Recordset
Dim cmdPG As
OleDb.OleDbCommand
Dim dv As New DataView
Dim oPar As
OleDb.OleDbParameter
Dim dA As New
OleDb.OleDbDataAdapter
If DS Is Nothing Then
Exit Sub
End If
If
cboEntConceptual.Text = "" Then
Exit Sub
End If
lstEntExplotacion.Items.Clear()
If Not DS.Tables("ENTEXPL") Is Nothing Then
DS.Tables("ENTEXPL").Clear()
End If
EscribirLog("Generando
Diccionario Entidad explotacion - " & Now.ToString("dd/MM/yyyy
HH:mm:ss"))
srSQL
= New
System.IO.StreamReader(strStartupPath & "\CargarEntExplotacion.sql")
strConsulta = srSQL.ReadToEnd
If cnxPD.State
<> ConnectionState.Open Then
cnxPD.Open()
End If
cmdPG = New
OleDb.OleDbCommand(strConsulta, cnxPD)
oPar = cmdPG.Parameters.Add("?", OleDb.OleDbType.VarChar, 50)
oPar.Value = DirectCast(Me.cboEntConceptual.SelectedItem,
AddItem).Clave.ToString()
dA.SelectCommand = cmdPG
dA.Fill(DS, "ENTEXPL")
lstSeleccion.Items.Clear()
dv
= DS.Tables("ENTEXPL").DefaultView
End Sub
Private Sub Cargacombo(ByVal strSelect As String, ByVal cboGenerica As ComboBox, Optional ByVal strParametro As String = "")
Dim srSQL As IO.StreamReader
Dim strConsulta As String
Dim rsSQL As New ADODB.Recordset
Dim dicGenerico As New Dictionary(Of String, String)
Dim cmdPG As
OleDb.OleDbCommand
Dim dv As New DataView
Dim oPar As
OleDb.OleDbParameter
Dim dA As New
OleDb.OleDbDataAdapter
If Not DS Is Nothing Then
DS.Clear()
End If
DS
= New
DataSet
srSQL = New
System.IO.StreamReader(strStartupPath & strSelect)
strConsulta = srSQL.ReadToEnd
If cnxPD.State
<> ConnectionState.Open Then
cnxPD.Open()
End If
cmdPG = New
OleDb.OleDbCommand(strConsulta, cnxPD)
oPar
= cmdPG.Parameters.Add("?", OleDb.OleDbType.VarChar, 50)
oPar.Value = strParametro
dA.SelectCommand = cmdPG
dA.Fill(DS, "CARGACOMBO")
cboGenerica.Items.Clear()
dicGenerico.Clear()
dv = DS.Tables("CARGACOMBO").DefaultView
For Each drv As
DataRowView In dv
If Not
dicGenerico.ContainsKey(drv(0)) Then
dicGenerico.Add(drv(0), drv(1))
End If
'almacenamos
los valores junto con su clave
cboGenerica.Items.Add(New AddItem(drv(1), drv(0)))
Next
End Sub
Private Sub
btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Dim EntExpl
' Dim EntCodigos
Dim ilstEntExpl As New List(Of String)
Dim iEnum As IEnumerator
For Each EntExpl In
lstEntExplotacion.SelectedItems
lstSeleccion.Items.Add(EntExpl)
ilstEntExpl.Add(EntExpl)
Next
iEnum = ilstEntExpl.GetEnumerator
While iEnum.MoveNext
lstEntExplotacion.Items.Remove(iEnum.Current)
End While
'Repito con códigos
'Dim EntCodigos
'Dim ilstCodigos As New List(Of String)
'Dim iEnucod As IEnumerator
'For Each EntCodigos In lstCodigos.SelectedItems
' lstElegidos.Items.Add(EntCodigos)
' ilstCodigos.Add(EntCodigos)
'Next
'iEnucod =
ilstCodigos.GetEnumerator
'While iEnum.MoveNext
'
lstCodigos.Items.Remove(iEnucod.Current)
'End While
'Fin repito con codigos
If lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
Private Sub
btnAddAll_Click(sender As Object, e As EventArgs) Handles btnAddAll.Click
Dim Entexpl
Dim ilstEntExpl As New List(Of String)
Dim iEnum As IEnumerator
For Each Entexpl In
lstEntExplotacion.Items
lstSeleccion.Items.Add(Entexpl)
ilstEntExpl.Add(Entexpl)
Next
iEnum = ilstEntExpl.GetEnumerator
While iEnum.MoveNext
lstEntExplotacion.Items.Remove(iEnum.Current)
End While
If
lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
Private Sub
btnDel_Click(sender As Object, e As EventArgs) Handles btnDel.Click
Dim EntExpl
Dim ilstEntexpl As New List(Of String)
Dim iEnum As IEnumerator
For Each EntExpl In
lstSeleccion.SelectedItems
lstEntExplotacion.Items.Add(EntExpl)
ilstEntexpl.Add(EntExpl)
Next
iEnum = ilstEntexpl.GetEnumerator
While iEnum.MoveNext
lstSeleccion.Items.Remove(iEnum.Current)
End While
If
lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
Private Sub
btnDelAll_Click(sender As Object, e As EventArgs) Handles btnDelAll.Click
Dim EntExpl
Dim ilstEntExpl As New List(Of String)
Dim iEnum As IEnumerator
For Each EntExpl In
lstSeleccion.Items
lstEntExplotacion.Items.Add(EntExpl)
ilstEntExpl.Add(EntExpl)
Next
iEnum = ilstEntExpl.GetEnumerator
While iEnum.MoveNext
lstSeleccion.Items.Remove(iEnum.Current)
End While
If
lstSeleccion.Items.Count > 0 Then
btnAceptar.Enabled = True
Else
btnAceptar.Enabled = False
End If
End Sub
End Class
'Esta
clase AddItem permite almacenar un diccionario clave-valor en un combobox
Public Class AddItem
Private moClave As Object
Private msNombre As String
Public Sub New(ByVal Nombre As String, ByVal Clave As Object)
msNombre = Nombre
moClave = Clave
End Sub
Public Property
Clave() As Object
Get
Return
moClave
End Get
Set(ByVal Value As Object)
moClave = Value
End Set
End Property
Public Property Nombre() As String
Get
Return
msNombre
End Get
Set(ByVal Value As String)
msNombre = Value
End Set
End Property
Public Overrides Function ToString() As String
Return msNombre
End Function
End Class
This is a great post and the information written in this post is true and well-founded because the information in it is given in full detail, that's why I got very interested in this blog. Thank you for giving this article, if you have any information related to server hosting or to buy a high-tech server, then contact USA VPS Hosting and how it can be important for this modern world. Thanks once again.
ResponderEliminar