Visual Basic.NET - Ayuda con ListView

 
Vista:
sin imagen de perfil

Ayuda con ListView

Publicado por SandraP (12 intervenciones) el 11/08/2017 21:58:33
Hola chicos,

Estoy programando un presupuesto basado en un LISTVIEW, con las siguientes características:

. 3 Columnas (Articulo, Descripción, Precio)
. Un textbox fuera del LISTVIEW me va colocando la suma.de la columna Precio
. Un textbox fuera del LISTVIEW me va colocando el numero de renglones añadidos.

Funciona bien agregando los items, no así cuando trato de eliminar a través del evento Click.

El Error que me arroja es el siguiente:
.
+$exception {"InvalidArgument=Value of '2' is not valid for 'index'." & vbCrLf & "Parameter name: index"} System.ArgumentOutOfRangeException

El código para eliminar es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.Click
	' Borrar item del presupuesto
	Dim Respuesta As Integer
	Respuesta = MsgBox("Desea Borrar este Movimiento de la factura?", vbQuestion + vbOKCancel)
	If Respuesta = 1 Then
		Dim Lista As ListViewItem = New ListViewItem
		Dim total As Double = 0
		Dim i As Integer = 0
		If ListView1.Items.Count <> 0 Then
			For Each Lista In ListView1.SelectedItems
				Lista.Remove()
			Next
			For i = 0 To (Lista.SubItems.Count - 1)
				total = total + Me.ListView1.Items(i).SubItems(2).Text
			Next
			Texttotal.Text = total
			TextRenglones.Text = ListView1.Items.Count
		End If
	End If
End Sub

Tengo dudas si no hay otro control mejor para estas cosas, intente con listbox, tuve problemas
con el
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 karlos kstro
Val: 25
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ayuda con ListView

Publicado por karlos kstro (13 intervenciones) el 12/08/2017 00:57:19
Esta es la solución

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.Click
	' Borrar item del presupuesto
	Dim Respuesta As Integer
	Respuesta = MsgBox("Desea Borrar este Movimiento de la factura?", vbQuestion + vbOKCancel)
	If Respuesta = 1 Then
		Dim Lista As ListViewItem = New ListViewItem
		Dim total As Double = 0
		Dim i As Integer = 0
		If ListView1.Items.Count <> 0 Then
			For Each Lista In ListView1.SelectedItems
				Lista.Remove()
			Next
			'''''''''''''''''''''''''
			For i = (Lista.SubItems.Count - 1) To 0
				total = total + Me.ListView1.Items(i).SubItems(2).Text
			Next
			'''''''''''''''''''''''''''''
			TextBox2.Text = total
			TextBox3.Text = ListView1.Items.Count
		End If
	End If
End Sub
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
Imágen de perfil de karlos kstro
Val: 25
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ayuda con ListView

Publicado por karlos kstro (13 intervenciones) el 12/08/2017 01:13:05
En la anterior falto mover tres lineas...:

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
Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.Click
	' Borrar item del presupuesto
	Dim Respuesta As Integer
	Respuesta = MsgBox("Desea Borrar este Movimiento de la factura?", vbQuestion + vbOKCancel)
	If Respuesta = 1 Then
		Dim Lista As ListViewItem = New ListViewItem
		Dim total As Double = 0
		Dim i As Integer = 0
		If ListView1.Items.Count <> 0 Then
 
			Dim num As Integer
			num = Lista.SubItems.Count - 1
			For i = num To 0 Step -1
				total = total + Me.ListView1.Items(i).SubItems(2).Text
			Next
 
			For Each Lista In ListView1.SelectedItems
				Lista.Remove()
			Next
 
			TextBox2.Text = total
			TextBox3.Text = ListView1.Items.Count
		End If
	End If
End Sub
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
sin imagen de perfil

Ayuda con ListView

Publicado por SandraP (12 intervenciones) el 12/08/2017 03:08:18
Mucha Gracias Karlos....

El código que me indicas corrige el error de rango, pero la suma de la columna
no es la que debería tener una vez eliminado el item...

Salu2
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
sin imagen de perfil

Ayuda con ListView

Publicado por SandraP (12 intervenciones) el 12/08/2017 16:49:18
La lógica me dice que primero borro y luego calculo, resuelto

1
2
3
4
5
6
7
8
For Each Lista In ListView1.SelectedItems
       Lista.Remove()
Next
Dim num As Integer
num = Me.ListView1.Items.Count - 1
For i = num To 0 Step -1
        total = total + Me.ListView1.Items(i).SubItems(2).Text
Next

Muchas gracias
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
Imágen de perfil de karlos kstro
Val: 25
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ayuda con ListView

Publicado por karlos kstro (13 intervenciones) el 12/08/2017 18:07:48
Esta tambien soluciona...

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
Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.Click
 
	' Borrar item del presupuesto
	Dim Respuesta As Integer
	Respuesta = MsgBox("Desea Borrar este Movimiento de la factura?", vbQuestion + vbOKCancel)
	If Respuesta = 1 Then
		Dim Lista As ListViewItem = New ListViewItem
		Dim total As Double = 0
		Dim i As Integer = 0
		If ListView1.Items.Count <> 0 Then
			Dim num As Integer
			num = Lista.SubItems.Count - 1
			For i = num To 0 Step -1
				If ListView1.SelectedItems.Item(num).Selected = True Then
					ListView1.SelectedItems(num).Remove()
				End If
			Next
			num = ListView1.Items.Count
			For i = num - 1 To 0 Step -1
				total = total + Me.ListView1.Items(i).SubItems(2).Text
			Next
			TextBox2.Text = total
			TextBox3.Text = ListView1.Items.Count
			ListView1.Refresh()
		End If
	End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar