none
Concatenar Datos ListView con Visual Basic 2008

    Question

  • Buen dia, tengo un pequeño problema con una aplicacion que estoy realizando en visual basic .net 2008, en mi aplicacion manejo 1 listview con varias columnas y N numero de dato, las columnas son:

    |CODIGO|DESCRIPCION|CANTIDAD|PRECIO|SUBTOTAL|REFERNCIA|

    Luego tengo otro lo que hace mi aplicacion es que le renglon por renglon los datos del listview y cuando son iguales en codigo y precio los une en otro listview, por esto no hay problema los pasa correctamenta el segundo listview, el problema que tengo si uno el renglon 1 con el renglon 3 quiero unir tambien la colunma de la refenrecia es decir que se algo asi:

    Listview Origen

    |CODIGO|DESCRIPCION|CANTIDAD|PRECIO|SUBTOTAL|REFERNCIA|

    |1|BANDA|1|10.00|10.00|DATOS-DATOS-DATOS|

    |1|MANGUERA|2|20.00|40.00|DATOS2-DATOS2-DATOS2|

    |1|BANDA|3|10.00|30.00|DATOS3-DATOS3-DATOS3|

    Listview Destino

    |CODIGO|DESCRIPCION|CANTIDAD|PRECIO|SUBTOTAL|REFERNCIA|

    |1|BANDA|4|10.00|40.00|DATOS-DATOS-DATOS DATOS3-DATOS3-DATOS3|

    Lo que no puedo hacer es que me concatene las referencias no entiendo por que no lo realizar, ya que si le doy la instruccion con el siguiente codigo que concatene los precios si lo hace y le ordeno que lo mande a un textbox , creo que es por que algo tiene que ver con los tipos de datos en las referencias o como mando llamar la informacion del Listview ya probe poniendo tostring, o text.tostring y no me funciona.

     Dim variable1 As String
            Dim cadena As String = ""
            For i As Integer = 0 To lstmovw.Items.Count - 1 Step 1

                variable1 = lstmovw.Items.Item(i).SubItems(6).Text

                cadena = cadena & variable1


            Next
          

            tbfrom.Text = cadena

    me podrian ayudar con esto por favor, en el campo de las referencias puedes ser cualquier caracter.

    Sin mas por el momento me despido en espera de suc omentarios.

    Saludos.


    • Moved by Enrique M. MontejoMVP Saturday, June 30, 2012 6:02 PM Controles de Windows Forms (De:Lenguaje VB.NET)
    Tuesday, May 08, 2012 3:50 AM

All replies

  • Buenas nanreh.

    ¿Podrías aportarnos la excepción que salta al realizar lo que comentas?

    ¿Puedes también aportarnos el código que utilizas para los precios para compararlos?

    Un saludo.


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es

    Tuesday, May 08, 2012 6:26 AM
  • hola

    veo que mencionas que son dos los listview, pero no estaras inicializando la variable "cadena" por cada listvierw que recorres, no ?

    proque eso ahria perder los datos del loop anterior

    Dim cadena As String = ""
    For Each item As ListViewItem In lstmovw.Items
    
         Dim variable1 As String = item.SubItems(6).Text
    
         cadena = cadena & variable1
    
    Next
    
    For Each item2 As ListViewItem In ListView2.Items
    
         Dim variable1 As String = item2.SubItems(6).Text
    
         cadena = cadena & variable1
    
    Next       
    
    tbfrom.Text = cadena
    como veras no debes inicializar la variable donde unes la info

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Tuesday, May 08, 2012 12:22 PM
  • buen dia, Gracias por al respuestas, pero no me genera ninguna excepcion, y lo inicializar la varible por error eso no esta ocurrioendo ya verifique, les anexo el codigo que utilizo y para unificar la inforacion.

     Private Sub btunificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btunificar.Click
            Dim cantidad As Double
            Dim cdx As Integer
            Dim gtotal As Double
            Dim partida As Integer = 100
    
    
            cantidad = 0
            cdx = 0
           
            For i As Integer = 0 To lstmovw.Items.Count - 1 Step 1
    
                If i = 0 Then
                    With ltwagr.Items.Add(Trim(Format$(partida)))
                        .SubItems.Add(lstmovw.Items.Item(i).SubItems(1).Text)
                        .SubItems.Add(lstmovw.Items.Item(i).SubItems(2).Text)
                        cantidad = CDbl(lstmovw.Items.Item(i).SubItems(3).Text)
                        .SubItems.Add(Format$(cantidad, "#,###0.00"))
                        .SubItems.Add(lstmovw.Items.Item(i).SubItems(4).Text)
                        .SubItems.Add(Format$(CDbl(lstmovw.Items.Item(i).SubItems(4).Text), "#,###0.00"))
                        .SubItems.Add(lstmovw.Items.Item(i).SubItems(6).Text)
                        lstmovw.Items.Item(i).Checked = True
                        partida = partida + 100
                        cdx = 0
                    End With
    
                    For ii As Integer = i + 1 To lstmovw.Items.Count - 1 Step 1
                        If Trim(lstmovw.Items.Item(ii).SubItems(1).Text) = Trim(ltwagr.Items.Item(0).SubItems(1).Text) Then
                            If Trim(lstmovw.Items.Item(ii).SubItems(4).Text) = Trim(ltwagr.Items.Item(0).SubItems(4).Text) Then
                                'MsgBox("Igual", MsgBoxStyle.OkOnly)
                                ltwagr.Items.Item(0).SubItems(3).Text = Format$(CDbl(Trim(lstmovw.Items.Item(ii).SubItems(3).Text)) _
                                + CDbl(Trim(ltwagr.Items.Item(0).SubItems(3).Text)), "#,###0.00")
                                ltwagr.Items.Item(0).SubItems(5).Text = Format$(CDbl(Trim(ltwagr.Items.Item(0).SubItems(3).Text)) _
                                * CDbl(Trim(ltwagr.Items.Item(0).SubItems(4).Text)), "#,###0.00")
                                ltwagr.Items.Item(0).SubItems(6).Text = ltwagr.Items.Item(0).SubItems(6).Text & lstmovw.Items.Item(i).SubItems(6).Text
                                lstmovw.Items.Item(ii).Checked = True
                            End If
    
    
                        End If
    
                    Next
    
                Else
    
                    If lstmovw.Items.Item(i).Checked = False Then
                        With ltwagr.Items.Add(Trim(Format$(partida)))
                            .SubItems.Add(lstmovw.Items.Item(i).SubItems(1).Text)
                            .SubItems.Add(lstmovw.Items.Item(i).SubItems(2).Text)
                            cantidad = CDbl(lstmovw.Items.Item(i).SubItems(3).Text)
                            .SubItems.Add(Format$(cantidad, "#,###0.00"))
                            .SubItems.Add(lstmovw.Items.Item(i).SubItems(4).Text)
                            .SubItems.Add(Format$(CDbl(lstmovw.Items.Item(i).SubItems(4).Text), "#,###0.00"))
                            .SubItems.Add(lstmovw.Items.Item(i).SubItems(6).Text)
                            lstmovw.Items.Item(i).Checked = True
                            partida = partida + 100
                            cdx = cdx + 1
                        End With
    
                        For ii As Integer = i + 1 To lstmovw.Items.Count - 1 Step 1
                            If Trim(lstmovw.Items.Item(ii).SubItems(1).Text) = Trim(ltwagr.Items.Item(cdx).SubItems(1).Text) Then
                                If Trim(lstmovw.Items.Item(ii).SubItems(4).Text) = Trim(ltwagr.Items.Item(cdx).SubItems(4).Text) Then
                                    'MsgBox("Igual", MsgBoxStyle.OkOnly)
                                    ltwagr.Items.Item(cdx).SubItems(3).Text = Format$(CDbl(Trim(lstmovw.Items.Item(ii).SubItems(3).Text)) _
                                    + CDbl(Trim(ltwagr.Items.Item(cdx).SubItems(3).Text)), "#,###0.00")
                                    ltwagr.Items.Item(cdx).SubItems(5).Text = Format$(CDbl(Trim(ltwagr.Items.Item(cdx).SubItems(3).Text)) _
                                    * CDbl(Trim(ltwagr.Items.Item(cdx).SubItems(4).Text)), "#,###0.00")
                                    ltwagr.Items.Item(cdx).SubItems(6).Text = ltwagr.Items.Item(cdx).SubItems(6).Text & lstmovw.Items.Item(i).SubItems(6).Text
                                    lstmovw.Items.Item(ii).Checked = True
    
                                End If
    
    
                            End If
    
                        Next
                    End If
    
    
    
    
    
                End If
    
    
            Next
    
            For i As Integer = 0 To ltwagr.Items.Count - 1 Step 1
                gtotal = Format$(CDbl(ltwagr.Items.Item(i).SubItems(5).Text), "#,###0.00") + gtotal
            Next
    
            tbgtotaluni.Text = Format$(gtotal, "#,###0.00")
            btunificar.Enabled = False
    
    
        

    Si tiene alguna duda con gusto se las aclara.

    Gracias.

    Tuesday, May 08, 2012 8:49 PM
  • Buenas.

    ¿Has comprobado en depuración que el valor "lstmovw.Items.Item(i).SubItems(6).Text" sea el que esperas? A ver si te está devolviendo vacio, ya que de un primer momento no veo ningun error en el código.

    ltwagr.Items.Item(cdx).SubItems(6).Text = ltwagr.Items.Item(cdx).SubItems(6).Text & lstmovw.Items.Item(i).SubItems(6).Text

    Comprueba también el valor de "ltwagr.Items.Item(cdx).SubItems(6).Text" a ver si va a ser el vacio, ya que otra cosa no me explico.

    Un saludo.


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es


    Tuesday, May 08, 2012 9:50 PM
  • buen gracias por la respueta, ya verifique el codigo y se da el valor que necesito, pero no lo concatena, otra prueba que realizo es que si modifico la siguiente linea

    ltwagr.Items.Item(cdx).SubItems(6).Text = ltwagr.Items.Item(cdx).SubItems(6).Text & lstmovw.Items.Item(i).SubItems(6).Text
    
    
    'Por lo siguiente
    
    ltwagr.Items.Item(cdx).SubItems(6).Text = ltwagr.Items.Item(cdx).SubItems(6).Text & lstmovw.Items.Item(i).SubItems(5).Text

    o sea le indico que en vez de concatenarme la columna 6 lo haga con la 5 el campo del Subtotal si lo realiza sin ningun problema, pero esta columna son solo numeros no se si eso tenga algo que ver.

    Saludos, Y de antemano muchas gracias por el tiempo que se toman en responder.

    Tuesday, May 08, 2012 10:13 PM
  • no entiendo porque tanto codigo en ese evento para unificar, ademas no veo donde estas tomando el item 6 para concatenar en un string

    solo veo esto

    For i As Integer = 0 To ltwagr.Items.Count - 1 Step 1
         gtotal = Format$(CDbl(ltwagr.Items.Item(i).SubItems(5).Text), "#,###0.00") + gtotal
    Next

    pero no entendi si querias sumar o concatenar en un string, porque el Format() devuelve strting eso n sive para sumar

    For Each item As ListViewItem In ltwagr.Items
         gtotal += CDbl(item.SubItems(5).Text)
    Next

    de esta frma sumaria, por supuesto gtotal seria del tipo double

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Wednesday, May 09, 2012 12:07 PM
  • Buen dia gracias por la respuesta, en la parte de codigo que comentas ahi estoy haciendo una suma si lo hace con el codigo que tengo, pero lo cambio por el tuyo ya que es menos codigo y esta mejor.

    En donde intento concatenar los datos es en la siguienteparte del codigo

    'Aqui le digo que me una lo que ya hay en mi listview1 
    'columna 6 con lo que trae el listview2 en la columna 6
    

    For ii As Integer = i + 1 To lstmovw.Items.Count - 1 Step 1 If Trim(lstmovw.Items.Item(ii).SubItems(1).Text) = Trim(ltwagr.Items.Item(cdx).SubItems(1).Text) Then If Trim(lstmovw.Items.Item(ii).SubItems(4).Text) = Trim(ltwagr.Items.Item(cdx).SubItems(4).Text) Then 'MsgBox("Igual", MsgBoxStyle.OkOnly) ltwagr.Items.Item(cdx).SubItems(3).Text = Format$(CDbl(Trim(lstmovw.Items.Item(ii).SubItems(3).Text)) _ + CDbl(Trim(ltwagr.Items.Item(cdx).SubItems(3).Text)), "#,###0.00") ltwagr.Items.Item(cdx).SubItems(5).Text = Format$(CDbl(Trim(ltwagr.Items.Item(cdx).SubItems(3).Text)) _ * CDbl(Trim(ltwagr.Items.Item(cdx).SubItems(4).Text)), "#,###0.00") 'Aqui le digo que lo concatene

    ltwagr.Items.Item(cdx).SubItems(6).Text = ltwagr.Items.Item(cdx).SubItems(6).Text & lstmovw.Items.Item(ii).SubItems(6).Text lstmovw.Items.Item(ii).Checked = True End If End If Next

    Pero ahi estonde no lo realiza ya verifique y se le paso los datos a variable si les asigna valor pero si estas variables las intento unir no lo hace.

    Gracias por las respuestas.

    Saludos.

    Wednesday, May 09, 2012 8:22 PM
  • buen dia, Disculpen mi insistencia pero alguien tendra alguan otra respuesta que pueda intentar, ya que no logro corregirlo ya intente utilizando stribgbuilder y no lo une la cadena que le indico con el siguiente codigo

            Dim head As String = Trim(lstmovw.Items.Item(5).SubItems(6).ToString)
            Dim sb As New StringBuilder()
            sb = sb.Append(head)
            sb = sb.Append(head)
            MsgBox(sb.ToString(), MsgBoxStyle.YesNo)

    al igual que el codigo anterios si a este le digo que una el subitem 5 si lo hace no se porque una si la otra  o no, sabran algo al respecto.

    Friday, May 11, 2012 4:00 AM
  • Buenas nanreh.

    Desconozco si la aplicación trabaja contra una base de datos pero.. ¿Existe la posibilidad de que subas el proyecto a SkyDrive?

    Un saludo.


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es

    Friday, May 11, 2012 6:21 AM
  • Hola

    Porque no rellenas los dos listview y luego concatenas el campo que quieres, tu haces esto

          For i As Integer = 0 To lstmovw.Items.Count - 1 Step 1
                 ....

                
    For ii As Integer =i + 1 To lstmovw.Items.Count - 1 Step 1
                 .....

    puede ser que a la hora de concatenar estas intentando recoger una información que aun no a sido asignada
                       




    • Edited by ToniAG Friday, May 11, 2012 7:49 AM
    Friday, May 11, 2012 7:48 AM
  • Antonio López Atienza Buen dia .

    Si te puedo mandar el projecto pero no se como skydriver, si me pasas algun correo de lo envio no es muy grande.

    Saludos.

    Friday, May 11, 2012 8:49 PM