Tuto-Como cargar un listview desde un archivo .txt en visualbasic

Iniciado por Christian010, 15 Noviembre 2008, 02:31 AM

0 Miembros y 1 Visitante están viendo este tema.

Christian010

Bueno aqui les tengo un tuto para cargar un listview desde visualbasic.net,  y guardarlo.

Utilizaremos Microsoft Visual Basic 2008

Primero abrimos un nuevo proyecto y agregamos 2 botones y un listview

Propiedades: listiview con gridlines en true,view en detalis, y agregamos 2 columnas

al final queda asi:



ahora el codigo para cargar el listview, este cargara 2 archivos de texto que se encuentren en la misma carpeta que la app el primero lo llamaremos primero y sera el que se agregue en la primera columna el otro lo llamaremos segundo y sera el que se cargue en la segunda columna.

el programa leera linea por linea el archivo y por cada linea agregara un item al listview


   'la declaramos como un sub para poder llamarla despues facilmente
    Sub leer()
        'comprobamos que existen los arcivos de texto
        If My.Computer.FileSystem.FileExists(Application.StartupPath + "/primera.txt") And My.Computer.FileSystem.FileExists(Application.StartupPath + "/segunda.txt") Then
            'borramos el listview por seguridad
            ListView1.Items.Clear()
            'empezamos a leer
            Dim sr As New System.IO.StreamReader( _
    Application.StartupPath + "/primera.txt", _
    System.Text.Encoding.Default, _
    True)
            ' Leer el contenido mientras no se llegue al final
            While sr.Peek() <> -1
                ' Leer una líena del archivo
                Dim s As String = sr.ReadLine()
                ' Si no está vacía, añadirla al listview
                ' Si está vacía, continuar
                If String.IsNullOrEmpty(s) Then
                    Continue While
                End If
                'añadirla al listview
                ListView1.Items.Add(s)
            End While
            ' Cerrar el archivo
            sr.Close()
            'abrimos el segundo archivo
            Dim sd As New System.IO.StreamReader( _
       Application.StartupPath + "/segunda.txt", _
       System.Text.Encoding.Default, _
       True)
            ' Leer el contenido mientras no se llegue al final
            While sd.Peek() <> -1
                'Creamos un bucle algo complicado para poner el subitem
                Dim na As Integer
                na = 0
                Dim laItem As ListViewItem
                Dim a As Integer
                For a = 1 To ListView1.Items.Count
                    If na = ListView1.Items.Count Then
                    Else
                        For Each laItem In ListView1.Items
                            'Leer una líena del archivo
                            Dim s As String
                            s = sd.ReadLine
                            ' Si no está vacía, añadirla al listview
                            ' Si está vacía, continuar
                            If String.IsNullOrEmpty(s) Then
                                Continue While
                            End If
                            'añadirla al listview
                            ListView1.Items(na).SubItems.Add(s)
                            na = na + 1
                        Next
                    End If
                Next
            End While
            sd.Close()
            'ordenamos los datos
            ListView1.Sort()
        Else
            MsgBox("No se encontro la base de datos, se cargara con las tablas vacias", MsgBoxStyle.Critical, "Error")
            ListView1.Items.Clear()
            'aqui va el mensaje de error si no se encuentra los archivos de texto
        End If


y para llamar la instruccion solo hace falta escribir leer() en el codigo, si queremos que cargue al presionar el boton seria

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        leer()
    End Sub


y ya con esto la aplicacion carga los datos



ahora lo segundo, guardar los datos

    Sub guardar()
        'borramos la base de datos antigua
        If My.Computer.FileSystem.FileExists(Application.StartupPath + "/primera.txt") Then My.Computer.FileSystem.DeleteFile(Application.StartupPath + "/primera.txt")
        'hacemos un bucle para obtener los datos de la primer columna
        Dim nu As Integer
        nu = 0
        Dim loItem As ListViewItem
        Dim i As Integer
        For i = 1 To ListView1.Items.Count
            If nu = ListView1.Items.Count Then
            Else
                For Each loItem In ListView1.Items
                    'guardamos la nueva base de datos
                    My.Computer.FileSystem.WriteAllText(Application.StartupPath + "/primera.txt", ListView1.Items(nu).Text + vbCrLf, True)
                    nu = nu + 1
                Next
            End If
        Next
        'borramos la segunda
        If My.Computer.FileSystem.FileExists(Application.StartupPath + "/segunda.txt") Then My.Computer.FileSystem.DeleteFile(Application.StartupPath + "/segunda.txt")
        'hacemos de nuevo un bucle
        Dim na As Integer
        na = 0
        Dim laItem As ListViewItem
        Dim a As Integer
        For a = 1 To ListView1.Items.Count
            If na = ListView1.Items.Count Then
            Else
                For Each laItem In ListView1.Items
                    'lo guardamos
                    My.Computer.FileSystem.WriteAllText(Application.StartupPath + "/segunda.txt", ListView1.Items(na).SubItems(1).Text + vbCrLf, True)
                    na = na + 1
                Next
            End If
        Next
    End Sub


y al igual que con el otro lo podemos llamar como guardar ()

en el boton seria

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        guardar()
    End Sub


y ya con eso queda, este codigo se puede usar en varios proyectos

solo le hace falta como modificar los datos  ;D pero eso es facil de hacer

les dejo el proyecto ya compilado

http://www.badongo.com/file/12099321

salu2  ;D

43H4FH44H45H4CH49H56H45H

Son demasiadas líneas de código para la función que realiza, la lectura y llenado del listview se puede hacer a más en dos líneas de código usando Add de ListView y ReadAllText de FileSystem. Al margen de muchas otras mejoras.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

Christian010

Cita de: 43H4FH44H45H4CH49H56H45H en 15 Noviembre 2008, 07:13 AM
Son demasiadas líneas de código para la función que realiza, la lectura y llenado del listview se puede hacer a más en dos líneas de código usando Add de ListView y ReadAllText de FileSystem. Al margen de muchas otras mejoras.

lo que sucede es que con readalltext se cargan todos los datos en una sola columna y con este codigo se cargan un dato por cada linea por ejemplo si el archivo de texto tiene escrito:

hola
adios
hola

el programa lo añadiria asi:



aunque si sabes como hacerlo de una forma mas facil puedes postear el code

salu2   :D

43H4FH44H45H4CH49H56H45H

#3
Lo siento me equivoque al escribir  ;D
En mi caso lo haria asi:
Imports System
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim yo As String() = File.ReadAllLines("C:\1.txt")
        For Each ver As String In yo
            ListView1.Items.Add(ver)
        Next

    End Sub
End Class


Igualmente se puede implementar AddRange para acortar el código.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

seba123neo

Hola, ahora voy a probar..pero con un Split y un array que guarde cada linea (ya sean 2 o 50 columnas) te lo tiene que cargar...
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson