• Viernes 29 de Marzo de 2024, 06:59

Autor Tema:  modificar listview en tiempo de ejecución  (Leído 2941 veces)

solilopi

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
modificar listview en tiempo de ejecución
« en: Viernes 24 de Octubre de 2014, 03:40 »
0
Hola de nuevo, 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 en NÚMERO DE PIEZAS =630 (veces que aparece repatida en el segundo fichero esa pieza) 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:
Código: [Seleccionar]
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.  :ayuda:

Haggen

  • Miembro activo
  • **
  • Mensajes: 88
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re:modificar listview en tiempo de ejecución
« Respuesta #1 en: Miércoles 25 de Marzo de 2015, 20:14 »
0
No se si te entendí, quieres modificar la columna "x" de tu listview para todos los registros una vez cargados?, qué es lo que no te funciona de:

Código: [Seleccionar]
'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)

No carga la ultima columna?