Ayuda con leer un Listview

Iniciado por abdiel2475, 26 Diciembre 2011, 00:11 AM

0 Miembros y 2 Visitantes están viendo este tema.

abdiel2475

Hola bueno nesesito ayuda para leer el subitem de un listview y que me diga cuantos hay entrados y cuantos salidos y el precio total:

flistview.TXTNumero.Text = a la cantidad de listitems que tengo en un listview
.ListItems(e).SubItems(12) = al dinero que han pagado
.ListItems(e).SubItems(14) = (Si/No) Si son los salidos/pagados y No los que han entrado

Este es un codigo de como Imprimir un listview al parecer el codigo funciona bien
pero al momento de que quiero sumar y darle valores a NewAdds, NewOuts, Cantidad...
me salen cosas que no. :/
NewAdds = los que an entrado (los que tienen "No")
NewsOuts = los que an pagado los que se van (los que tienen "Si")
CantidadGanada = al dinero que an pagado los que se van (NewsOuts)

Public Sub Imprimir_ListView(ListView As ListView)

On Error Resume Next

Dim i As Integer, AnchoCol As Single, Espacio As Integer, X As Integer
Dim e As Integer, e2 As Integer
  Dim NewsAdds As Integer, NewsOuts As Integer, CantidadGanada As Integer
  AnchoCol = 0
  NewsAdds = 0
  NewsOuts = 0
  CantidadGanada = 0
  'Recorremos desde la primer columna hasta la última para almacenar el ancho total
  For i = 1 To ListView.ColumnHeaders.Count
     AnchoCol = AnchoCol + ListView.ColumnHeaders(i).Width
  Next
 
  Espacio = 0
 
With ListView
   
  'Encabezado de ejemplo
  Printer.Print "Reporte Diario"
   Printer.Print "Del dia: " & Date
 
  Printer.Print
 
  'Imprime una línea
  Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.ScaleWidth, Printer.CurrentY)
 
 
  'Acá se imprimen los encabezados del ListView
  For i = 1 To .ColumnHeaders.Count
      Espacio = Espacio + CInt(.ColumnHeaders(i).Width * Printer.ScaleWidth / AnchoCol)
      Printer.Print ListView.ColumnHeaders(i).Text;
      Printer.CurrentX = Espacio
     
  Next
 

  Printer.Print
 
  'Imprime una línea
  Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.ScaleWidth, Printer.CurrentY)
 
  'Imprime Línea en blanco
  Printer.Print
 
  'Este bucle recorre los items y subitems del ListView  y los imprime
  For i = 1 To .ListItems.Count
       Espacio = 0
       
       Set Item = .ListItems(i)
       Printer.Print Item.Text;
       'Recorremos las columnas
       For X = 1 To .ColumnHeaders.Count - 1
             Espacio = Espacio + CInt(.ColumnHeaders(X).Width * Printer.ScaleWidth / AnchoCol)
             Printer.CurrentX = Espacio
             Printer.Print Item.SubItems(X);
       Next
       
       'Otro espacio en blanco
       Printer.Print
  Next
 
  For e = 1 To flistview.TXTNumero.Text
     CantidadGanada = CantidadGanada + .ListItems(e).SubItems(12)
      If .ListItems(e).SubItems(14) = "Si" Then
      NewsOuts = NewsOuts + 1
      Else
            NewsAdds = NewsAdds + 1
      End If
     
  Next

 
  Printer.Print
  'Imprime la línea de final de impresión
  Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.ScaleWidth, Printer.CurrentY)
  Printer.Print
  'Texto del pie
  Printer.Print "Ingresados: " & NewsAdds
  Printer.Print "Salidos: " & NewsOuts
  Printer.Print "Total de dinero: " & CantidadGanada
    End With
  'Comenzamos la impresión
  Printer.EndDoc
End Sub



De antemano muchas gracias
Y Feliz Navidad!

raul338

No entiendo donde esta el problema, con unas variables, un bucle para recorrer los items, y un par de If para saber cuales van y cuales no serian la solucion :P

abdiel2475

Todo jala bien exepto

  For e = 1 To flistview.TXTNumero.Text
     CantidadGanada = CantidadGanada + .ListItems(e).SubItems(12)
      If .ListItems(e).SubItems(14) = "Si" Then
      NewsOuts = NewsOuts + 1
      Else
            NewsAdds = NewsAdds + 1
      End If
     
  Next

 


Ya que si en el listview hay nadamas 6 "lineas se podria decir" y el TxTNumero = 50
me da resultados de 40+ :/ osea como que sige contando o no se pasa :/ alguna solucion para indentificar bien , algo mas exacto o presiso

raul338

Resetea el contador antes del for, y como esta declarada la variable? Los numeros pueden ser con coma no? :P

abdiel2475

si ya los tenia reseteados
  Dim NewsAdds As Integer, NewsOuts As Integer, CantidadGanada As Integer
  AnchoCol = 0
  NewsAdds = 0
  NewsOuts = 0


pero ni asi :(

pff alguna otra idea o manera

abdiel2475

#5
Bueno al parecer ya lo resolvi con un metodo un poco mediaval pero :) al final da el resultado esperado.

Código (vb) [Seleccionar]

With ListView4
     Dim Idx As Long
     For e = 1 To flistview.TXTNumero.Text - 1
     If .ListItems(e).SubItems(14) = "Si" Then
        .ListItems(e).Selected = True
          CantidadGanada = CantidadGanada + .ListItems(e).SubItems(12)
          NewsOuts = NewsOuts + 1
     Else
          NewsAdds = NewsAdds + 1
     End If
     Go1 = Go1 + 1
     If Go1 = .ListItems.Count Then
          GoTo Msgs
     End If
     Next e
End With

Msgs:
MsgBox ("Ingresados: " & NewsAdds)
MsgBox "Salidos: " & NewsOuts
MsgBox "Total de dinero: " & CantidadGanada

Gracias.