Columnas repetidas en lisview1

Estoy usando Ado y trabajando con el ejemplo de la base de datos Biblio.mdb que viene con visual basic.
Deseo que se muestren en un listview1 los datos de la consulta que hago en un select y esto lo hace bien y muestra los datos en el listview1, pero el problema que existe es que si vuelvo a presionar el command1 para volver a realizar el filtro, los encabezados y el resultado del filtro se duplican, es decir, vuelven a aparecer. Presioné otra vez sobre command1 como prueba para ver si no salia algo mal.
El código usado es el siguiente:
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
Dim campo As Integer
Dim item As ListItem
Dim i As Long
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Archivos de programa\Microsoft Visual Basic\BIBLIO.MDB;Persist Security Info=False;"
.Open
End With
rst.Open "SELECT * FROM Authors", cnn, adOpenDynamic, adLockOptimistic
For campo = 0 To rst.Fields.Count - 1
ListView1.ColumnHeaders.Add , , rst.Fields(campo).Name
Next
While Not rst.EOF
Set itmX = ListView1.ListItems.Add(, , CStr(rst!Au_ID))
If Not IsNull(rst!Author) Then
itmX.SubItems(1) = CStr(rst!Author)
End If
If Not IsNull(rst![Year Born]) Then
itmX.SubItems(2) = rst![Year Born]
End If
Rst. MoveNext
Wend
ListView1.View = lvwReport
Rst. Close
Cnn. Close
Si solo le doy un click al command1 queda bien:
Au_ID Author [Year Born]
1 Juna
2 Pablo
3 Pedro
4 Raul
Si le vuelvo a dar click mira lo que sucede:
Au_ID     Author      [Year Born]     Au_ID     Author     [Year Born]
1 Juna
2 Pablo
3 Pedro
4 Raul
1 Juna
2 Pablo
3 Pedro
4 Raul

1 respuesta

Respuesta
1
Antes del while para llenar los datos, hace un listview. Clear o la función que usa para limpiar el listview.
a) Si lo hago en visual basic 6, antes del while, así da el siguiente error: ListView1.clear
error de compilación:
No se encontró el método o el miembro de datos
b) Si lo hago en visual basic 6 así da el siguiente error: rst.ListView1.clear
error de compilación:
No se encontró el método o el miembro de datos
antes del while,
La idea es limpiar el list view
Mira esta url
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/138-listview-eliminar-duplicado.htm
With ListView
. Items. Clear()
. Columns. Clear()
Si esto no resulta tengo más para probar
Gracias por responder emperador20.
Primero que nada me fui al link que me indicaste y lo copie tal cual elaborando un nuevo proyecto y lo hice de dos formas:
1)La primera forma fue elaborar un nuevo proyecto y en el form1 coloque el código que me indicaba el link que me diste en el command1_click e hice lo propio con el form_load para que cargara los 10 elementos y colocara el nombre del command1.
Te aclaro que dejé por defecto los nombres del proyecto por defecto es decir:
form1 y en un modulo coloque la función pero me da el siguiente error:
Error de compilación
Procedimiento Sub o Function no definido
2) La otra forma como probé el link que me indicaste fue colocar todo el código, tanto el de la función como el del command1_click en un form borrando el Modulo1 pero me da e siguiente error:
Error 13 en tiempo de ejecución
No coinciden lo tipos
No hice la prueba con:
With ListView
.Items.Clear()
.Columns.Clear()
Porque consideré que si no me funcionaba el ejemplo del Link no era conveniente probar con esta modificación a mi código original.
antes del while
Me. ListView1. ListItems. Clear y listo.
Muchas gracias por responder emperador20. El problema se solucionó en un 50 % porque cuando te hice la pregunta esto era lo que sucedía:
Si solo le doy un click al command1 queda bien:
Au_ID Author [Year Born]
1 Juna
2 Pablo
3 Pedro
4 Raul
Si le vuelvo a dar click mira lo que sucede:
Au_ID         Author             [Year Born]           Au_ID          Author          [Year Born]
1 Juna
2 Pablo
3 Pedro
4 Raul
1 Juna
2 Pablo
3 Pedro
4 Raul
Ahora, incorporando tu recomendación, que está muy buena, mira lo que sucede:
Si solo le doy un click al command1 queda bien:
Au_ID Author [Year Born]
1 Juna
2 Pablo
3 Pedro
4 Raul
Si le vuelvo a dar click mira lo que sucede:
Au_ID       Author       [Year Born]        Au_ID         Author       [Year Born]
1 Juna
2 Pablo
3 Pedro
4 Raul
Perfecto como puede ver, ya no se repite el Au_id ni tampoco Author
Pero el problema persiste con relación a las columnas Au_id, Author y Year Borne, porque como puede apreciar siguen apareciendo y las columnas de Au_id, Author y Year Born solamente deberían aparecer una sola vez y aque aparecen dos veces. Si le doy tres veces al command1 aparecen tres veces, si le doy 4 veces al command1 aparecen cuatro veces y así sucesivamente.
Saludos
¿Esta parte del código esta toda en el commandbutton?
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Archivos de programa\Microsoft Visual Basic\BIBLIO.MDB;Persist Security Info=False;"
.Open
End With
rst.Open "SELECT * FROM Authors", cnn, adOpenDynamic, adLockOptimistic
For campo = 0 To rst.Fields.Count - 1
ListView1.ColumnHeaders.Add , , rst.Fields(campo).Name
Next
While Not rst.EOF
Set itmX = ListView1.ListItems.Add(, , CStr(rst!Au_ID))
If Not IsNull(rst!Author) Then
Si es así, pone el ListView1. ListItems. Clear delante de todo
después de declarar las variables.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas