Autor
|
Tema: (SOLUCIONADO) Problema con Listview (Leído 3,070 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
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: Dim Recovery_Items As New List(Of Tuple(Of Integer, String, String))() Private Sub Recovery_Timer_Tick() Handles Recovery_Timer.Tick Recovery_Items.Clear() For Each item As ListViewItem In ListView_Monitor.Items Recovery_Items.Add(Tuple.Create(item.Index, item.SubItems(1).Text, item.SubItems(2).Text)) Next IO. File. WriteAllText("Recovery.tmp", String. Join(vbNewLine, Recovery_Items ), System. Text. Encoding. Default) End Sub
...Lo cual me genera esto en un archivo de texto: (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: Private Sub Recovery() If IO. File. Exists("Recovery.tmp") Then For Each Line As String In IO. File. ReadAllLines("Recovery.tmp") ListView_Monitor.Items.Add(TryCast(Line, ListViewItem)) Next End If 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
Mensajes: 9.885
|
Estoy saliendo del apuro haciéndolo de la siguiente manera, pero me parece muy cutre y segúramente se puede mejorar mucho... Guardar: Dim Recovery_Items As New List(Of Tuple(Of Integer, String, String))() ' Recovery Timer Private Sub Recovery_Timer_Tick() Handles Recovery_Timer.Tick Recovery_Items.Clear() For Each item As ListViewItem In ListView_Monitor.Items Recovery_Items.Add(Tuple.Create( _ item.Index, _ String.Format("""""{0}""""", item.SubItems(1).Text), _ String.Format("""""{0}""""", item.SubItems(2).Text))) Next IO. File. WriteAllText("Recovery.tmp", String. Join(vbNewLine, Recovery_Items ), System. Text. Encoding. ASCII) End Sub
Archivo de texto: (0, "Valor1", "Valor2") (1, "V,a,l,o,r,1", "V,a,l,o,r,2") Cargar: Dim Recovery_Index As Integer = 0 Private Sub Recovery() If IO. File. Exists("Recovery.tmp") Then For Each Line As String In IO. File. ReadAllLines("Recovery.tmp") Line = Line.Substring(1, Line.Length - 2) ' Deletes the first and last () chars. For Each value As String In Line.Split(", """) Recovery_Index += 1 Select Case Recovery_Index Case 1 item = ListView_Monitor.AddItem(value.Replace("""", Nothing).Trim) Case Else item.SubItems.Add(value.Replace("""", Nothing).Trim) End Select Next Recovery_Index = 0 Next End If End Sub
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
GuardarList <ListViewItem > items = new List <ListViewItem >();foreach (ListViewItem listView in listView1.Items) { items.Add(listView); } BinaryFormatter binary = new BinaryFormatter ();using (FileStream sw = new FileStream (@"D:\listItems.dat",FileMode .Create)) { binary.Serialize(sw, items); }
CargarlistView1.Items.Clear(); List<ListViewItem> items; BinaryFormatter binary = new BinaryFormatter ();using (FileStream sr = new FileStream (@"D:\listItems.dat",FileMode .Open)) { items = (List<ListViewItem>)binary.Deserialize(sr); } 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
Mensajes: 9.885
|
Muchas gracias! Edito: Así queda el código para VB #Region " Backup and Recovery Listview Items " ' [ Backup and Recovery Listview Items ] ReadOnly BackupFile As String = "Recovery.tmp" ' File conaining the data to recover. Private BackupData As New List(Of ListViewItem) ' Storage for the data to backup. Private BinaryFormat As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() Private Sub Backup(ByVal ListView As ListView) BackupData.Clear() Select Case ListView.Items.Count Case 0 Try : IO. File. Delete(BackupFile ) : Catch : End Try ' We don't need the BackupFile if it will not contains anything to recover... Case Else BackupData.AddRange(ListView.Items.Cast(Of ListViewItem)) Using Writter As New IO.FileStream(BackupFile, IO.FileMode.Create) BinaryFormat.Serialize(Writter, BackupData) End Using End Select End Sub Private Sub Recovery(ByVal ListView As ListView) If IO. File. Exists(BackupFile ) Then Using Reader As New IO.FileStream(BackupFile, IO.FileMode.Open) BackupData = DirectCast(BinaryFormat.Deserialize(Reader), List(Of ListViewItem)) End Using ListView.Items.AddRange(BackupData.ToArray()) End If End Sub #End Region
|
|
« Última modificación: 6 Agosto 2013, 22:24 pm por EleKtro H@cker »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problema con imagelist y listview
Programación Visual Basic
|
SRVAM
|
7
|
8,790
|
27 Agosto 2009, 00:48 am
por SRVAM
|
|
|
Problema con ListView y DataBase
« 1 2 »
.NET (C#, VB.NET, ASP)
|
Skeletron
|
16
|
13,234
|
13 Octubre 2009, 19:19 pm
por Skeletron
|
|
|
Problema rellenando ListView
.NET (C#, VB.NET, ASP)
|
quiqueroal
|
2
|
3,553
|
3 Mayo 2011, 22:15 pm
por quiqueroal
|
|
|
Problema con listview
Programación Visual Basic
|
hackertotal22
|
2
|
3,559
|
13 Julio 2011, 10:25 am
por hackertotal22
|
|
|
Extraño problema y conflicto con los ListView
Programación Visual Basic
|
RiasChan
|
1
|
2,498
|
15 Junio 2019, 00:36 am
por Serapis
|
|