Bueno, encontré uno de los proyectos donde trabajé ese tema, y la cosa, pese a mi recuerdo, era exactamente como la estás planteando, pero con un pequeño agregado...
Primero algunos consejos:
1) No acoples la generación de la visualizacion a la base de datos. Crea una clase específica para administrar la relación de la aplicación con la base, y ponle todas las llamadas allí (obviamente creando una para cada caso nuevo que necesites).
2) No configures la visualización del ListView en el mismo método que lo carga. Son acciones y conceptos diferentes. Separalo al menos en dos: Uno para confirurar el control y otro para cargarlo.
3) No manipules directamente el control en el Sub. Pasalo como parámetro y cargalo así. Incluso más, te conviene pasar el control
y la tabla de datos (no un reader, por favor, un DataSet o DataTable) para hacer toda la tarea.
Bien, este sería el código original (extirpadas todas las partes no relevantes) de uno de los usados:
Código vb:
Ver originalPrivate Sub Mostrar(ByVal List As ListView, ByRef DS() As DataRow)
' -----------------------------------------------------------------
Dim objListItem As New ListViewItem
' -------------------------------------------------------------------
List.BeginUpdate()
With List
.Items.Clear()
Dim contar As Integer = 0
For Each drw As DataRow In DS
objListItem = .Items.Add(valor_A_Ingresar, 0)
' Valores a ingresar en cada columna
objListItem.SubItems.Add(drw.Item(0).ToString)
objListItem.SubItems.Add(drw.Item(1).ToString)
objListItem.SubItems.Add(drw.Item(3).ToString)
objListItem.SubItems.Add(drw.Item(4).ToString)
objListItem.SubItems.Add(drw.Item(5).ToString)
End With
' -----------------------------------------------------------------
List.EndUpdate()
' Esto es para que la aplicación refresque
Application.DoEvents()
' Esto es porque primero oculto el control, a fin de que el refresco del mismo no lo haga más lento.
LV.Show()