domingo, 30 de agosto de 2015

Como limpiar un combobox en vb net

Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.


Amigos, les platico mi experiencia, hace tiempo hice una rutina para llenar un combobox desde un datable, por exigencias de mi rutina, tenía que volver a entrar una y otra vez si cierta condición se cumplía, yo probé a limpiar el combobox con varios métodos como:
       Cbocompan.DataSource = Nothing
        Cbocompan.Items.Clear()
        Cbocompan.Refresh()
Y ¡NADA de NADA! me seguía añadiendo otro registro u otros registros al combobox de tal manera que si entraba 20 veces a la rutina me duplicaba 20 veces la información del combobox
Razone que puesto que el combobox venia de un datatable, algo estaba pasando con el datatable, yo asumía erróneamente que cuando se crea una instancia del sqldataadapter y llena(fill) el datatable lo dejaba limpio o lo reinicializaba, pues ¡RESULTA QUE NO! VUELVE A ÑADIR OTROS REGISTROS A ESA DATABLE A PESAR DE QUE EN LA BASE DE DATOS SOLO TIENE 3 REGISTROS.   
Para que quede claro, a continuación les muestro la forma en que llenaba el combobox, donde DT es es mi datatable y sp_traecompan es mi stored procedure que me trae los datos d la base de datos
            Dim miadaptador As SqlDataAdapter
miadaptador = New SqlDataAdapter("sp_traecompan", nvacnn.miConexion)
            miadaptador.SelectCommand.CommandType = CommandType.StoredProcedure
            miadaptador.Fill(dt)
            Cbocompan.DataSource = dt
            Cbocompan.DisplayMember = dt.Columns("desccompania").Caption.ToString
            Cbocompan.ValueMember = dt.Columns("cvecia").Caption.ToString
            Cbocompan.SelectedValue = ""


‘aquí verifico cuantos registros tiene mi datatable, en la tabla de la base original solo tengo tres registros, esto lo hice cuando me canse de tratar de limpiar el combo y nada
            Dim numeroreg As Integer = dt.Rows.Count
‘aqui esta el quid de la cuestión, si entraba una sola vez, el dt.Rows.Count tenía tres ítems(puesto que en mi tabla de la base de datos tengo 3 registros) pero si volvía a entrar ya tenia 6 y si entaba otra vez a esta rutina ya tenia 9 y asi sucesivamente, yo asumi entonces que el datatable no se limpia automáticamente y que hay que añadir la siguiente instrucción antes de hacer la rutina
dt.Clear() ‘¡AQUI ESTA LA SOLUCIÓN, LIMPIAR ANTE DE LLENAR NUEVAMENTE LA DATABLE Y OBVIAMENTE ANTES DE LLENAR EL COMBOBOX!
          Dim miadaptador As SqlDataAdapter
           miadaptador = New SqlDataAdapter("sp_traecompan", nvacnn.miConexion)
Bueno si tienen una mejor solución o sugerencia a este problema , no duden en compartirla
¡Saludos!