tengo problemas para eliminar un item en listview

31/03/2005 - 15:35 por Marta | Informe spam
miren este es el codigo que uso:

Private Sub btnCarpetas_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnCarpetas.Click
Dim sql As String
Dim cmd_insert As New OdbcCommand
Dim i As Integer
Try
cn.Open()
Dim sql2 As String = "insert into envios
(nombre,descripcion,asunto,cuerpo,fecha) values ('" &
txtnombre.Text & "','" & txtDescripcion.Text & "','" &
txtAsunto.Text & "','" & txtcuerpo.Text & "',now())"
cmd_insert.CommandText = sql2
cmd_insert.Connection = cn
cmd_insert.ExecuteNonQuery()
sql2 = "select currval('envios_envio_id_seq')
as id_actual"
cmd_insert.CommandText = sql2
Dim dr As OdbcDataReader
dr = cmd_insert.ExecuteReader
dr.Read()
id_actual = dr.Item("id_actual")
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Try
cn.Open()
For i = 0 To lvcarpetas.Items.Count - 1
If lvcarpetas.Items.Item(i).Selected Then
sql = "insert into carpetas_envios
(carpeta_id,envio_id) values (" & lvcarpetas.Items.Item
(i).SubItems(1).Text & "," & id_actual & ")"
cmd_insert.Connection = cn
cmd_insert.CommandText = sql
cmd_insert.ExecuteNonQuery()
If lvcarpetas.Items.Count > 0 Then
lvcarpetas.Items.Item(i).Remove()
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
cn.Close()
End Sub

Pero solo me funciona si elimino desde el ultimo de la
lista, si borro el primero me da el siguiente error:

El argumento especificado esta fuera del intervalo de
valores validos. Nombre del parametro:4 no es un valor
valido para 'displayIndex'

Preguntas similare

Leer las respuestas

#1 Carlos Gómez
31/03/2005 - 16:56 | Informe spam
ese error puede ser debido a que estas intentando acceder a un elemento del
listview que no existe. ¿en que linea concreta da el error?, que se ha
ejecutado antes... con solo poner el código hay pocas pistas de que está
sucediendo realmente. De todas formas, quita el bucle for y cambialo por un
while, ya que el valor de lvcarpetas.items.count varía dentro del bucle.
Puede ser que ese sea el problema
"Marta" escribió en el mensaje
news:10dc01c535f6$90c0d270$
miren este es el codigo que uso:

Private Sub btnCarpetas_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnCarpetas.Click
Dim sql As String
Dim cmd_insert As New OdbcCommand
Dim i As Integer
Try
cn.Open()
Dim sql2 As String = "insert into envios
(nombre,descripcion,asunto,cuerpo,fecha) values ('" &
txtnombre.Text & "','" & txtDescripcion.Text & "','" &
txtAsunto.Text & "','" & txtcuerpo.Text & "',now())"
cmd_insert.CommandText = sql2
cmd_insert.Connection = cn
cmd_insert.ExecuteNonQuery()
sql2 = "select currval('envios_envio_id_seq')
as id_actual"
cmd_insert.CommandText = sql2
Dim dr As OdbcDataReader
dr = cmd_insert.ExecuteReader
dr.Read()
id_actual = dr.Item("id_actual")
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Try
cn.Open()
For i = 0 To lvcarpetas.Items.Count - 1
If lvcarpetas.Items.Item(i).Selected Then
sql = "insert into carpetas_envios
(carpeta_id,envio_id) values (" & lvcarpetas.Items.Item
(i).SubItems(1).Text & "," & id_actual & ")"
cmd_insert.Connection = cn
cmd_insert.CommandText = sql
cmd_insert.ExecuteNonQuery()
If lvcarpetas.Items.Count > 0 Then
lvcarpetas.Items.Item(i).Remove()
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
cn.Close()
End Sub

Pero solo me funciona si elimino desde el ultimo de la
lista, si borro el primero me da el siguiente error:

El argumento especificado esta fuera del intervalo de
valores validos. Nombre del parametro:4 no es un valor
valido para 'displayIndex'
Respuesta Responder a este mensaje
#2 Marta
31/03/2005 - 19:15 | Informe spam
Gracias, pero While que tendrias que poner mientras alla
elementos en el listview???
el error se produce al hacer click en el boton cuando
tengo seleccionado el item que quiero eliminar.

Saludos,

Marta
ese error puede ser debido a que estas intentando


acceder a un elemento del
listview que no existe. ¿en que linea concreta da el


error?, que se ha
ejecutado antes... con solo poner el código hay pocas


pistas de que está
sucediendo realmente. De todas formas, quita el bucle


for y cambialo por un
while, ya que el valor de lvcarpetas.items.count varía


dentro del bucle.
Puede ser que ese sea el problema
"Marta" escribió


en el mensaje
news:10dc01c535f6$90c0d270$
miren este es el codigo que uso:

Private Sub btnCarpetas_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnCarpetas.Click
Dim sql As String
Dim cmd_insert As New OdbcCommand
Dim i As Integer
Try
cn.Open()
Dim sql2 As String = "insert into envios
(nombre,descripcion,asunto,cuerpo,fecha) values ('" &
txtnombre.Text & "','" & txtDescripcion.Text & "','" &
txtAsunto.Text & "','" & txtcuerpo.Text & "',now())"
cmd_insert.CommandText = sql2
cmd_insert.Connection = cn
cmd_insert.ExecuteNonQuery()
sql2 = "select currval




('envios_envio_id_seq')
as id_actual"
cmd_insert.CommandText = sql2
Dim dr As OdbcDataReader
dr = cmd_insert.ExecuteReader
dr.Read()
id_actual = dr.Item("id_actual")
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Try
cn.Open()
For i = 0 To lvcarpetas.Items.Count - 1
If lvcarpetas.Items.Item(i).Selected




Then
sql = "insert into carpetas_envios
(carpeta_id,envio_id) values (" & lvcarpetas.Items.Item
(i).SubItems(1).Text & "," & id_actual & ")"
cmd_insert.Connection = cn
cmd_insert.CommandText = sql
cmd_insert.ExecuteNonQuery()
If lvcarpetas.Items.Count > 0 Then
lvcarpetas.Items.Item(i).Remove




()
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
cn.Close()
End Sub

Pero solo me funciona si elimino desde el ultimo de la
lista, si borro el primero me da el siguiente error:

El argumento especificado esta fuera del intervalo de
valores validos. Nombre del parametro:4 no es un valor
valido para 'displayIndex'




.

Respuesta Responder a este mensaje
#3 Carlos Gómez
01/04/2005 - 05:11 | Informe spam
dim i as integer=0
while i<lvCarpetas.Items.Count
...
end while

"Marta" escribió en el mensaje
news:122a01c53615$3d89eeb0$
Gracias, pero While que tendrias que poner mientras alla
elementos en el listview???
el error se produce al hacer click en el boton cuando
tengo seleccionado el item que quiero eliminar.

Saludos,

Marta
ese error puede ser debido a que estas intentando


acceder a un elemento del
listview que no existe. ¿en que linea concreta da el


error?, que se ha
ejecutado antes... con solo poner el código hay pocas


pistas de que está
sucediendo realmente. De todas formas, quita el bucle


for y cambialo por un
while, ya que el valor de lvcarpetas.items.count varía


dentro del bucle.
Puede ser que ese sea el problema
"Marta" escribió


en el mensaje
news:10dc01c535f6$90c0d270$
miren este es el codigo que uso:

Private Sub btnCarpetas_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnCarpetas.Click
Dim sql As String
Dim cmd_insert As New OdbcCommand
Dim i As Integer
Try
cn.Open()
Dim sql2 As String = "insert into envios
(nombre,descripcion,asunto,cuerpo,fecha) values ('" &
txtnombre.Text & "','" & txtDescripcion.Text & "','" &
txtAsunto.Text & "','" & txtcuerpo.Text & "',now())"
cmd_insert.CommandText = sql2
cmd_insert.Connection = cn
cmd_insert.ExecuteNonQuery()
sql2 = "select currval




('envios_envio_id_seq')
as id_actual"
cmd_insert.CommandText = sql2
Dim dr As OdbcDataReader
dr = cmd_insert.ExecuteReader
dr.Read()
id_actual = dr.Item("id_actual")
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Try
cn.Open()
For i = 0 To lvcarpetas.Items.Count - 1
If lvcarpetas.Items.Item(i).Selected




Then
sql = "insert into carpetas_envios
(carpeta_id,envio_id) values (" & lvcarpetas.Items.Item
(i).SubItems(1).Text & "," & id_actual & ")"
cmd_insert.Connection = cn
cmd_insert.CommandText = sql
cmd_insert.ExecuteNonQuery()
If lvcarpetas.Items.Count > 0 Then
lvcarpetas.Items.Item(i).Remove




()
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
cn.Close()
End Sub

Pero solo me funciona si elimino desde el ultimo de la
lista, si borro el primero me da el siguiente error:

El argumento especificado esta fuera del intervalo de
valores validos. Nombre del parametro:4 no es un valor
valido para 'displayIndex'




.

Respuesta Responder a este mensaje
#4 Carlos Gómez
01/04/2005 - 06:38 | Informe spam
"Carlos Gómez" escribió en el mensaje
news:
dim i as integer=0
while i<lvCarpetas.Items.Count
...


i = i + 1
end while
Respuesta Responder a este mensaje
#5 Steven Lewis
02/04/2005 - 19:09 | Informe spam
El problema radica en que el lvcarpetas.Items.Count lo obtienes con los
ítems completos, pero al quitar 1, el count disminuye, sin embargo sigues
teniendo el valor antiguo. Cuando llega al ítem final (luego de eliminar 1)
resulta que ese item final no existe dentro de la colección (porque el count
es realemtne count - 1).

Te sugeriría que no eliminaras un item de cualquier colección dentro de un
ciclo que cuente sus items, sino que cambies esa lógica por otra cosa. Como
por ejemplo, marcar la posición y hacerlo fuera del ciclo, o hacer el ciclo
desde atrás para adelante.

Saluds

Steven Lewis

"Marta" escribió en el mensaje
news:10dc01c535f6$90c0d270$
miren este es el codigo que uso:

Private Sub btnCarpetas_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnCarpetas.Click
Dim sql As String
Dim cmd_insert As New OdbcCommand
Dim i As Integer
Try
cn.Open()
Dim sql2 As String = "insert into envios
(nombre,descripcion,asunto,cuerpo,fecha) values ('" &
txtnombre.Text & "','" & txtDescripcion.Text & "','" &
txtAsunto.Text & "','" & txtcuerpo.Text & "',now())"
cmd_insert.CommandText = sql2
cmd_insert.Connection = cn
cmd_insert.ExecuteNonQuery()
sql2 = "select currval('envios_envio_id_seq')
as id_actual"
cmd_insert.CommandText = sql2
Dim dr As OdbcDataReader
dr = cmd_insert.ExecuteReader
dr.Read()
id_actual = dr.Item("id_actual")
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Try
cn.Open()
For i = 0 To lvcarpetas.Items.Count - 1
If lvcarpetas.Items.Item(i).Selected Then
sql = "insert into carpetas_envios
(carpeta_id,envio_id) values (" & lvcarpetas.Items.Item
(i).SubItems(1).Text & "," & id_actual & ")"
cmd_insert.Connection = cn
cmd_insert.CommandText = sql
cmd_insert.ExecuteNonQuery()
If lvcarpetas.Items.Count > 0 Then
lvcarpetas.Items.Item(i).Remove()
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
cn.Close()
End Sub

Pero solo me funciona si elimino desde el ultimo de la
lista, si borro el primero me da el siguiente error:

El argumento especificado esta fuera del intervalo de
valores validos. Nombre del parametro:4 no es un valor
valido para 'displayIndex'
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida