Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: abdiel2475 en 26 Diciembre 2011, 00:11 am



Título: Ayuda con leer un Listview
Publicado por: abdiel2475 en 26 Diciembre 2011, 00:11 am
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)

Código:
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!


Título: Re: Ayuda con leer un Listview
Publicado por: raul338 en 26 Diciembre 2011, 15:37 pm
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


Título: Re: Ayuda con leer un Listview
Publicado por: abdiel2475 en 26 Diciembre 2011, 16:18 pm
Todo jala bien exepto

Código:
  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


Título: Re: Ayuda con leer un Listview
Publicado por: raul338 en 26 Diciembre 2011, 20:26 pm
Resetea el contador antes del for, y como esta declarada la variable? Los numeros pueden ser con coma no? :P


Título: Re: Ayuda con leer un Listview
Publicado por: abdiel2475 en 26 Diciembre 2011, 22:03 pm
si ya los tenia reseteados
Código:
  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


Título: Re: Ayuda con leer un Listview
Publicado por: abdiel2475 en 27 Diciembre 2011, 02:00 am
Bueno al parecer ya lo resolvi con un metodo un poco mediaval pero :) al final da el resultado esperado.

Código
  1. With ListView4
  2.     Dim Idx As Long
  3.     For e = 1 To flistview.TXTNumero.Text - 1
  4.     If .ListItems(e).SubItems(14) = "Si" Then
  5.        .ListItems(e).Selected = True
  6.          CantidadGanada = CantidadGanada + .ListItems(e).SubItems(12)
  7.          NewsOuts = NewsOuts + 1
  8.     Else
  9.          NewsAdds = NewsAdds + 1
  10.     End If
  11.     Go1 = Go1 + 1
  12.     If Go1 = .ListItems.Count Then
  13.          GoTo Msgs
  14.     End If
  15.     Next e
  16. End With
  17.  
  18. Msgs:
  19. MsgBox ("Ingresados: " & NewsAdds)
  20. MsgBox "Salidos: " & NewsOuts
  21. MsgBox "Total de dinero: " & CantidadGanada
Gracias.