Saludos a todos !!!
Tiempo que no posteaba una duda, una gran duda...
Se trata de lo siguiente: Tengo un form, y en el 4 ComboBox "entrelazados" (por decirlo así):



El primer ComboBox "Estados", al seleccionar un Item, carga automáticamente el 2do ComboBox "Ciudades", con los respectivos Items relacionados a la primera selección; al seleccionar un Item del 2do Combo, carga un tercero referente a ""Barrio / Urb. / Zona", y así hasta cargar un cuarto Combo "Sector". se me olvidaba... los datos son cargados de una Base de Datos (FirebirdSQL).
Dichos ComboBox son cargados con esta subrutina:
Private Sub LoadComboBox(ByVal nSQL As Integer, _
ByVal cbx As ComboBox, _
ByVal tableName As String, _
ByVal displayMbr As String, _
ByVal valueMbr As String)
Dim FbCmd As FbCommand
Dim FbDad As FbDataAdapter
Dim Dtb As DataTable
'//
Try
Select Case nSQL
Case 1
sql = "SELECT * FROM Cesd ORDER BY Estado ASC;"
Case 2
sql = "SELECT * FROM Ccdd " & _
"WHERE Codigo_estado = '" & stateCode & "' " & _
"ORDER BY Ciudad ASC;"
Case 3
sql = "SELECT * FROM Cbur " & _
"WHERE Codigo_Ciudad = '" & cityCode & "' " & _
"ORDER BY Barrio_Urbanizacion ASC;"
Case 4
sql = "SELECT * FROM Cscr " & _
"WHERE Codigo_Barr_Urb = '" & suburbCode & "' " & _
"ORDER BY Sector ASC;"
End Select
FbCmd = New FbCommand(sql, FbConn)
FbDad = New FbDataAdapter(FbCmd)
Dtb = New DataTable
FbDad.Fill(Dtb)
With cbx
.DataSource = Dtb
.DisplayMember = displayMbr
.ValueMember = valueMbr
.Text = ""
End With
'//
Dtb = Nothing
FbCmd = Nothing
FbDad = Nothing
'//
cbx.Enabled = True
cbx.BackColor = Color.Azure
'//
If nSQL = 3 Then
txtAddressPress.Enabled = True
txtAddressPress.BackColor = Color.Azure
End If
Catch exFb As FbException
MsgBox(exFb.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
Esta Sub, no es nada del otro mundo, pero me funciona muy bien. Ahora EL PROBLEMA es que cuando quiero agregarle un Item opcional (por medio de código por supuesto) como por ejemplo "Otro Estado...", "Otra Ciudad...", etc. En caso de que el usuario desee agregar uno nuevo (bueno lo de insertar no es lo que trato aquí). NO PUEDO AGREGARLO, porque una vez establecida la propiedad DataSource del(os) ComboBox(s), No se puede realizar esta acción, es error (interceptado) que me arroja la aplicaciòn.
Probè esta otra Subrutina:
Private Sub LoadComboBox(ByVal nSQL As Integer, _
ByVal cbx As ComboBox, _
ByVal tableName As String, _
ByVal displayMbr As String, _
ByVal valueMbr As String)
Dim FbDad As FbDataAdapter
Dim Dst As DataSet
Dim Dtb As DataTable
Dim Dtr As DataRow
Dim _item As String = ""
Dim n As Integer = 0
'//
Try
Select Case nSQL
Case 1
sql = "SELECT * FROM Cesd ORDER BY Estado ASC;"
_item = "Otro Estado..."
Case 2
sql = "SELECT * FROM Ccdd " & _
"WHERE Codigo_estado = '" & stateCode & "' " & _
"ORDER BY Ciudad ASC;"
_item = "Otra Ciudad..."
Case 3
sql = "SELECT * FROM Cbur " & _
"WHERE Codigo_Ciudad = '" & cityCode & "' " & _
"ORDER BY Barrio_Urbanizacion ASC;"
_item = "Otro Barrio / Urb..."
Case 4
sql = "SELECT * FROM Cscr " & _
"WHERE Codigo_Barr_Urb = '" & suburbCode & "' " & _
"ORDER BY Sector ASC;"
_item = "Otro Sector..."
End Select
'//
FbDad = New FbDataAdapter(sql, FbConn)
Dst = New DataSet
Dtb = New DataTable
FbDad.Fill(Dst, tableName)
Dtb = Dst.Tables(tableName)
'//
With cbx
'// ----------------------------- Revisar este fragmento ----------------------------------
'n = .Items.Count
'For i As Integer = 0 To n - 1
' .Items.Remove(i)
'Next
'.Refresh()
'// ------------------------------------------------------------------------------------------------
For Each Dtr In Dtb.Rows
.Items.Add(Dtr.Item(displayMbr))
Next
'//
.Items.Add(_item)
.DisplayMember = displayMbr
.Text = ""
.Enabled = True
.BackColor = Color.Azure
End With
'//
If nSQL = 3 Then
txtAddressPress.Enabled = True
txtAddressPress.BackColor = Color.Azure
End If
'//
Dtr = Nothing
Dtb = Nothing
Dst = Nothing
FbDad = Nothing
Catch exFb As FbException
MsgBox(exFb.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
Y funciona muy bien (en apariencia)...


Pero fíjense lo que pasañ si cambio la selección de un Item, en el Combo que precede al último seleccionado por eejemplo:

Una soberana cagada que he hecho. los items anteriormente cargados, no se borran y se suman a los nuevos (solo en el Combo, gracias a DIOS !!!), lo que no pasaba usando la primara subrutina.
Lo que necesito es agregarle los Items que mencioné antes, sin que me ocrra esta catástrofe !!!
Agradecido de antemano !!!
Saludos desde Venezuela.
Manuel F. Borrego S.
