Visual Basic.NET - Modificar en tiempo de ejecución un listview

   
Vista:

Modificar en tiempo de ejecución un listview

Publicado por José Vicente (1 intervención) el 24/10/2014 10:18:24
Hola, tengo un listview que cargo con los datos resultantes de cruzar dos ficheros de texto, uno fijo con lo que hay que buscar y otro que cargo en el que se buscan las coincidencias y se enumeran en el listview.
El listview tiene las columnas GRUPO, REFERENCIA, DESCRIPCIÓN, NÚMERO DE PIEZAS, PIEZAS/DÍA.
Mi problema es:
¿Cómo consigo rellenar la última columna del listview que es donde tengo que hacer la operación?
Es decir, si tengo en NÚMERO DE PIEZAS = 630 (resultado de contar las ocurrencias de una determinada referencia) tendré en PIEZAS/DÍA = 150, pués es el resultado de dividir por 6 esa cantidad.
Os dejo el fragmento de código donde lleno el listview:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Private Sub btnAbrir_Click(sender As System.Object, e As System.EventArgs) Handles btnAbrir.Click
 
        Dim lenf As Long
        Dim lenr As Long
        Dim percent As Integer
        Dim dato As String
        txtArchive.Text = ""
        Me.progress.Style = ProgressBarStyle.Continuous
        Me.progress.Value = 0
        SendMessage(progress.Handle, 1040, 3, 0)
 
        Me.dlgOpen.InitialDirectory = path
        Me.dlgOpen.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"
        Me.dlgOpen.ShowDialog()
 
        If Me.dlgOpen.FileName <> "" Then
            Me.progress.Visible = True
            Me.lstViewMuestras.Items.Clear()
 
            'Limpiar items acumulados de las claves
 
            For i = 0 To keys.Length - 1
                keys(i).items = 0
            Next
 
            Me.txtArchive.Text = Me.dlgOpen.FileName
            Dim fr As New StreamReader(Me.dlgOpen.FileName)
            Dim texto As String = fr.ReadToEnd()
            filelines = texto.Split(CChar(vbNewLine))
 
            Me.lblStat.Text = "Depurando información..."
 
            'Eliminar aquellas líneas de texto que no contengan subclave
 
            ReDim depuradas(filelines.Length)
            Dim cdep As Int32 = 0
            lenf = filelines.Length * subkeys.Length
            lenr = 0
            For i As Int32 = 0 To filelines.Length - 1
                For j As Int32 = 0 To subkeys.Length - 1
                    If filelines(i).IndexOf(subkeys(j)) <> -1 Then
                        depuradas(cdep) = filelines(i)
                        cdep += 1
                        Exit For
                    End If
                Next j
                lenr += subkeys.Length
                percent = Convert.ToInt32(100 * (lenr / lenf))
                If percent >= 100 Then percent = 100
                Me.progress.Value = percent
                Application.DoEvents()
            Next i
 
            'Recuperamos memoria
 
            Array.Resize(depuradas, cdep - 1)
            Erase filelines
            texto = ""
 
            Me.lblStat.Text = "Procesando coincidencias..."
 
            'Recorremos la lista de claves analizando la totalidad del texto
 
            Me.progress.Style = ProgressBarStyle.Continuous
            SendMessage(progress.Handle, 1040, 3, 0)
            Me.progress.Value = 0
            lenf = keys.Length * depuradas.Length
            lenr = 0
            For i As Int32 = 0 To keys.Length - 1
                keys(i).items = 0
                For j As Int32 = 0 To depuradas.Length - 1
                    dato = depuradas(j).Trim().ToUpper().Replace(" ", "")
                    If dato.IndexOf(keys(i).key) <> -1 Then
                        keys(i).items += 1
                    End If
                    lenr += 1
                    percent = Convert.ToInt32(100 * (lenr / lenf))
                    If percent >= 100 Then percent = 100
                    Me.progress.Value = percent
                    Application.DoEvents()
                Next j
            Next i
 
            Me.progress.Style = ProgressBarStyle.Continuous
            SendMessage(progress.Handle, 1040, 3, 0)
            Me.progress.Value = 0
 
            'Actualizar la lista
 
            Me.lstViewMuestras.Items.Clear()
 
            'AGREGAMOS AGRUPACIONES (HEADERS) AL LISTVIEW PARA CLASIFICAR
 
            For i = 0 To heads.Length - 1
                Dim grupo As New ListViewGroup(heads(i).key)
                grupo.Header = heads(i).grupo
                grupo.Name = heads(i).grupo
                Me.lstViewMuestras.Groups.Add(grupo)
            Next
 
            'AGREGAMOS LOS ITEMS DE RECUENTO
            'Dim operacion As Double = 0
            Dim item As New ListViewItem
            Dim grup As New ListViewGroup
            For i = 0 To keys.Length - 1
 
                'Obtenemos el grupo destino
 
                grup = Me.lstViewMuestras.Groups(keys(i).grupo)
 
                'Creamos el nuevo item
 
                item = New ListViewItem(keys(i).grupo, grup)
                item.SubItems.Add(keys(i).code)
                item.SubItems.Add(keys(i).descp)
                item.SubItems.Add(keys(i).items.ToString())
 
                'Aquí va el calculador de piezas/día
                'item.SubItems.Add(keys(i).items.ToString())
 
 
                'Añadimos a la colección
 
                Me.lstViewMuestras.Items.Add(item)
            Next
 
            'Mostramos el botón de guardar el archivo
 
            btnGuarda.Visible = True
 
            'Damos formato al listview
 
            Dim c As Integer
            For c = 0 To lstViewMuestras.Items.Count - 2 Step 2
                lstViewMuestras.Items(c + 1).BackColor = Drawing.Color.AliceBlue
                lstViewMuestras.Items(c).BackColor = Drawing.Color.AntiqueWhite
            Next c
            If (lstViewMuestras.Items.Count And 1) <> 0 Then
                lstViewMuestras.Items(c).ForeColor = Drawing.Color.Brown
            End If
        Else
            MsgBox("NO SE HA SELECCIONADO NINGÚN FICHERO PARA PROCESAR", MsgBoxStyle.Information, AcceptButton)
        End If
 
        Me.lblStat.Text = ""
        Me.progress.Visible = False
    End Sub
¿Puede alguien echarme una mano?
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de giancarlo

Modificar en tiempo de ejecución un listview

Publicado por giancarlo (280 intervenciones) el 28/10/2014 16:09:42
para modificar, algo asi

lst_relacion.Items(indice).SubItems(1).Text = "nuevo valor"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar