elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  (SOLUCIONADO) Problema con Listview
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (SOLUCIONADO) Problema con Listview  (Leído 3,070 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
(SOLUCIONADO) Problema con Listview
« en: 6 Agosto 2013, 19:24 pm »

Estoy intentando hacer una manera para recuperar los items de un listview si la aplicación se cierra o se mata indebídamente.

El listview está en modo "detalles" y tiene 3 columnas.

Para guardar los items, hago esto:

Código
  1.    Dim Recovery_Items As New List(Of Tuple(Of Integer, String, String))()
  2.  
  3.    Private Sub Recovery_Timer_Tick() Handles Recovery_Timer.Tick
  4.  
  5.        Recovery_Items.Clear()
  6.  
  7.        For Each item As ListViewItem In ListView_Monitor.Items
  8.            Recovery_Items.Add(Tuple.Create(item.Index, item.SubItems(1).Text, item.SubItems(2).Text))
  9.        Next
  10.  
  11.        IO.File.WriteAllText("Recovery.tmp", String.Join(vbNewLine, Recovery_Items), System.Text.Encoding.Default)
  12.  
  13.    End Sub


...Lo cual me genera esto en un archivo de texto:

Código:
(0, Valor1, Valor2)
(1, V-a-l-o-r-1, V-a-l-o-r-2)
(2, V,a,l,o,r,1, V,a,l,o,r,2)



Ahora, ¿Como puedo parsear/castear el contenido del archivo de texto para agregarlo como item del listview en sus respectivas columnas?



Un ejemplo de lo que intento hacer, esto sucedería al iniciar la aplicación:

Código
  1.    Private Sub Recovery()
  2.  
  3.        If IO.File.Exists("Recovery.tmp") Then
  4.  
  5.            For Each Line As String In IO.File.ReadAllLines("Recovery.tmp")
  6.                ListView_Monitor.Items.Add(TryCast(Line, ListViewItem))
  7.            Next
  8.  
  9.        End If
  10.  
  11.    End Sub

Pero claro... al contener tantas comas los valores, no puedo hacer un Split, ni se me ocurre nada que hacer.


« Última modificación: 6 Agosto 2013, 20:53 pm por EleKtro H@cker » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Problema con Listview
« Respuesta #1 en: 6 Agosto 2013, 19:48 pm »

Estoy saliendo del apuro haciéndolo de la siguiente manera, pero me parece muy cutre y segúramente se puede mejorar mucho...

Guardar:
Código
  1.    Dim Recovery_Items As New List(Of Tuple(Of Integer, String, String))()
  2.  
  3.    ' Recovery Timer
  4.    Private Sub Recovery_Timer_Tick() Handles Recovery_Timer.Tick
  5.  
  6.        Recovery_Items.Clear()
  7.  
  8.        For Each item As ListViewItem In ListView_Monitor.Items
  9.            Recovery_Items.Add(Tuple.Create( _
  10.                              item.Index, _
  11.                              String.Format("""""{0}""""", item.SubItems(1).Text), _
  12.                              String.Format("""""{0}""""", item.SubItems(2).Text)))
  13.        Next
  14.  
  15.        IO.File.WriteAllText("Recovery.tmp", String.Join(vbNewLine, Recovery_Items), System.Text.Encoding.ASCII)
  16.  
  17.    End Sub


Archivo de texto:
Código:
(0, "Valor1", "Valor2")
(1, "V,a,l,o,r,1", "V,a,l,o,r,2")


Cargar:
Código
  1.    Dim Recovery_Index As Integer = 0
  2.  
  3.    Private Sub Recovery()
  4.  
  5.        If IO.File.Exists("Recovery.tmp") Then
  6.  
  7.            For Each Line As String In IO.File.ReadAllLines("Recovery.tmp")
  8.  
  9.                Line = Line.Substring(1, Line.Length - 2) ' Deletes the first and last () chars.
  10.  
  11.                For Each value As String In Line.Split(", """)
  12.                    Recovery_Index += 1
  13.                    Select Case Recovery_Index
  14.                        Case 1
  15.                            item = ListView_Monitor.AddItem(value.Replace("""", Nothing).Trim)
  16.                        Case Else
  17.                            item.SubItems.Add(value.Replace("""", Nothing).Trim)
  18.                    End Select
  19.                Next
  20.                Recovery_Index = 0
  21.            Next
  22.  
  23.        End If
  24.  
  25.    End Sub


En línea



Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Problema con Listview
« Respuesta #2 en: 6 Agosto 2013, 20:09 pm »

Guardar
Código
  1. List<ListViewItem> items = new List<ListViewItem>();
  2. foreach (ListViewItem listView in listView1.Items)
  3. {
  4.    items.Add(listView);
  5. }
  6.  
  7. BinaryFormatter binary = new BinaryFormatter();
  8. using (FileStream sw = new FileStream(@"D:\listItems.dat",FileMode.Create))
  9. {
  10.    binary.Serialize(sw, items);
  11. }
Cargar
Código
  1. listView1.Items.Clear();
  2.  
  3. List<ListViewItem> items;
  4.  
  5. BinaryFormatter binary = new BinaryFormatter();
  6. using (FileStream sr = new FileStream(@"D:\listItems.dat",FileMode.Open))
  7. {
  8.    items = (List<ListViewItem>)binary.Deserialize(sr);
  9. }
  10.  
  11. listView1.Items.AddRange(items.ToArray());

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Problema con Listview
« Respuesta #3 en: 6 Agosto 2013, 20:53 pm »

Muchas gracias!

Edito:

Así queda el código para VB

Código
  1. #Region " Backup and Recovery Listview Items "
  2.  
  3.    ' [ Backup and Recovery Listview Items ]
  4.  
  5.    ReadOnly BackupFile As String = "Recovery.tmp"  ' File conaining the data to recover.
  6.    Private BackupData As New List(Of ListViewItem) ' Storage for the data to backup.
  7.    Private BinaryFormat As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
  8.  
  9.    Private Sub Backup(ByVal ListView As ListView)
  10.  
  11.        BackupData.Clear()
  12.  
  13.        Select Case ListView.Items.Count
  14.  
  15.            Case 0
  16.                Try : IO.File.Delete(BackupFile) : Catch : End Try
  17.                ' We don't need the BackupFile if it will not contains anything to recover...
  18.  
  19.            Case Else
  20.  
  21.                BackupData.AddRange(ListView.Items.Cast(Of ListViewItem))
  22.  
  23.                Using Writter As New IO.FileStream(BackupFile, IO.FileMode.Create)
  24.                    BinaryFormat.Serialize(Writter, BackupData)
  25.                End Using
  26.  
  27.        End Select
  28.  
  29.    End Sub
  30.  
  31.    Private Sub Recovery(ByVal ListView As ListView)
  32.  
  33.        If IO.File.Exists(BackupFile) Then
  34.  
  35.            Using Reader As New IO.FileStream(BackupFile, IO.FileMode.Open)
  36.                BackupData = DirectCast(BinaryFormat.Deserialize(Reader), List(Of ListViewItem))
  37.            End Using
  38.  
  39.            ListView.Items.AddRange(BackupData.ToArray())
  40.  
  41.        End If
  42.  
  43.    End Sub
  44.  
  45. #End Region
« Última modificación: 6 Agosto 2013, 22:24 pm por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con imagelist y listview
Programación Visual Basic
SRVAM 7 8,790 Último mensaje 27 Agosto 2009, 00:48 am
por SRVAM
Problema con ListView y DataBase « 1 2 »
.NET (C#, VB.NET, ASP)
Skeletron 16 13,234 Último mensaje 13 Octubre 2009, 19:19 pm
por Skeletron
Problema rellenando ListView
.NET (C#, VB.NET, ASP)
quiqueroal 2 3,553 Último mensaje 3 Mayo 2011, 22:15 pm
por quiqueroal
Problema con listview
Programación Visual Basic
hackertotal22 2 3,559 Último mensaje 13 Julio 2011, 10:25 am
por hackertotal22
Extraño problema y conflicto con los ListView
Programación Visual Basic
RiasChan 1 2,498 Último mensaje 15 Junio 2019, 00:36 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines