Visual Basic.NET - Problemas al eliminar una fila

   
Vista:

Problemas al eliminar una fila

Publicado por Pinky presi28@hotmail.com (104 intervenciones) el 07/08/2015 16:58:52
Hola amigos del foro mi consulta es la siguiente, el usuario detecto un error muy grave en todas las gridview, las llama bien, las ingresas bien, las modifica bien, pero al eliminar la primera fila o la ultima fila, me manda el error que no se puede tener acceso a una fila eliminada, cuando uno presiona el check de la suma de columnas, favor de ayudarme he tratado de buscar una solución pero nada funciona, a continuación presente el código de eliminar una fila al presionar el botón de eliminar de la grilla.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub borrar_item(ByVal indice As Integer)
ds = Session("tabla")
Dim indice_borrado As Integer
For i = 0 To ds.Tables("Grilla").Rows.Count - 1
If Not ds.Tables("Grilla").Rows(i).RowState = DataRowState.Deleted Then
If CInt(ds.Tables("Grilla").Rows(i).Item("N_Filas")) = indice + 1 Then
ds.Tables("Grilla").Rows(i).Delete()
indice_borrado = i
ElseIf CInt(ds.Tables("Grilla").Rows(i).Item("N_Filas")) >= indice + 1 Then
ds.Tables("Grilla").Rows(i).Item("N_Filas") = CInt(ds.Tables("Grilla").Rows(i).Item("N_Filas")) - 1
End If
End If
Next
Dim vista As DataView = New DataView()
vista = ds.Tables("Grilla").DefaultView
Grilla.DataSource = vista
Grilla.DataBind()
Session.Add("tabla", ds)
contador_items.Text = CInt(contador_items.Text) - 1
TXTITEM.Text = contador_items.Text
Checkbox1.focus()
End Sub
y a continuación el mismo código que utilizo para sumar las columnas de las grillas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
Dim valor As Integer
Dim valor1 As Integer = 0
ds = Session("Tabla")
For i = 0 To ds.Tables("Grilla").Rows.Count + 1
For Each item As DataRow In ds.Tables("Grilla").Rows
valor = item("Valor_Mobra") + valor
Next
Next
TXTVALMANO.Text = valor.ToString
ds1 = Session("Tabla1")
For Each item As DataRow In ds1.Tables("Grilla1").Rows
valor1 = item("Valor_Repuestos") + valor1
Next
TXTVALREP.Text = valor1.ToString
TXTSUBTOTAL.Text = CInt(TXTVALMANO.Text) + CInt(TXTVALREP.Text)
TXTSUBTOTAL.Text = CInt(TXTSUBTOTAL.Text)
TXTSUBTOTAL.Enabled = False
TXTIVA.Text = Val(TXTSUBTOTAL.Text) * Val(19) / 100
TXTIVA.Text = CLng(TXTIVA.Text)
TXTTOTAL.Text = Val(TXTSUBTOTAL.Text) + Val(TXTIVA.Text)
TXTIVA.Enabled = False
TXTTOTAL.Enabled = False
End Sub
favor de ver en que puedo estar equivocado, desde ya muchas 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

Problemas al eliminar una fila

Publicado por giancarlo giangbd5@hotmail.com (280 intervenciones) el 19/08/2015 00:47:43
se me ocurre que el error esta aqui:

If Not ds.Tables("Grilla").Rows(i).RowState = DataRowState.Deleted Then
If CInt(ds.Tables("Grilla").Rows(i).Item("N_Filas")) = indice + 1 Then
ds.Tables("Grilla").Rows(i).Delete()
indice_borrado = i
ElseIf CInt(ds.Tables("Grilla").Rows(i).Item("N_Filas")) >= indice + 1 Then
ds.Tables("Grilla").Rows(i).Item("N_Filas") = CInt(ds.Tables("Grilla").Rows(i).Item("N_Filas")) - 1
End If
End If

un ejemplo:10 filas, y eliminas la 4, te quedan 9,
-- sin embargo debes eliminar la fila 9, en tu BD, la fila 10 se convertira en 9, por lo tanto eliminarias
-- si debes eliminar la 10, ya no existe

cuando debas eliminar algo, siempre debe ser por un id unico o primary key, mas no por el indice en que aparece
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