Hola Trulala de cordoba, muchas gracias por tu ayuda....
Un ultimo tip, por favor..... ya termine la mejora a mi aplicacion y al estar probandolo note un comportamiento medio raro en el gridview que se llena con un datatable.....
vamos por pasos....:
- Al cargar la pagina, se crea el carrito contenedor en una variable de session que va llenando un DataTable con las columnas que necesito.
- Despues con un boton voy agregando registros al DataTable Session y los voy mostrando en un GridView.
- Dentro del GridView puse un boton, que se repite en cada registro del Grid, que sirve para eliminar el registro que se seleccione.
-->> Lo raro del asunto es que en ocaciones despues de llenar el Grid y quiero eliminar algun registro me manda este error:
ERROR: There is no row at position 0, y digo que en ocaciones porque a veces funciona muy bien.... puede madar el error cuando tiene uno o varios registros..... y puede aparecer ERROR: There is no row at position 1.
Que sucedera?
Este es mi codigo para agregar al datatable el registro capturado:
Código:
Protected Sub btn_agregar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btn_agregar.Click
Try
Me.lb_error_partida.Text = ""
objDT = Session("myCarrito")
objDR = objDT.NewRow
Me.labelerror.Text = objDT.Rows.Count
objDR("numero_carrito") = Me.lb_carrito.Text
objDR("descripcion") = Me.tb_desc.Text
If Me.ddl_unidad.SelectedValue = "" Then
Me.lb_error_partida.Text = "Debe seleccionar la unidad de medida."
Exit Sub
Else
objDR("unidad_medida") = Me.ddl_unidad.SelectedValue
End If
objDR("cantidad") = Me.tb_cantidad.Text
objDR("precio_unitario") = Decimal.Parse(Me.tb_precio.Text)
objDR("total_mx") = Decimal.Parse(Me.lb_totalMX.Text)
objDR("total_us") = Decimal.Parse(Me.lb_totalUS.Text)
If Me.ddl_centrocostos.SelectedValue = "" Then
Me.lb_error_partida.Text = "Debe seleccionar el centro de costos."
Exit Sub
Else
objDR("centro_costos") = Me.ddl_centrocostos.SelectedValue
objDR("depto") = Me.lb_depto.Text
End If
If Me.ddl_cuentaGL.SelectedValue = "" Then
Me.lb_error_partida.Text = "Debe seleccionar la cuenta GL."
Exit Sub
Else
objDR("cuenta_gl") = Me.ddl_cuentaGL.SelectedValue
End If
objDR("cuenta") = Me.lb_cuenta.Text
objDT.Rows.Add(objDR)
Session("myCarrito") = objDT
Me.GV_carrito.DataSource = objDT
Me.GV_carrito.DataBind()
Me.lb_ODC_pesos.Text = FormatCurrency(total_mx())
Me.lb_ODC_dolares.Text = FormatCurrency(total_dlls())
Me.lb_odc_2.Text = FormatCurrency(total_2())
Me.lb_odc_3.Text = FormatCurrency(total_3())
Me.lb_odc_5.Text = FormatCurrency(total_5())
Me.lb_odc_9.Text = FormatCurrency(total_9())
Me.lb_saldo_2.Text = FormatCurrency(saldo_2())
Me.lb_saldo_3.Text = FormatCurrency(saldo_3())
Me.lb_saldo_5.Text = FormatCurrency(saldo_5())
Me.lb_saldo_9.Text = FormatCurrency(saldo_9())
Me.tb_desc.Text = ""
Me.ddl_unidad.SelectedIndex = 0
Me.tb_cantidad.Text = ""
Me.tb_precio.Text = ""
Me.lb_totalMX.Text = ""
Me.lb_totalUS.Text = ""
Me.ddl_centrocostos.SelectedIndex = 0
Me.ddl_cuentaGL.SelectedIndex = 0
Me.tb_desc.Focus()
Me.Enviar.Enabled = True
Me.GV_carrito.DataBind()
Catch ex As Exception
Beep()
Me.lb_error_partida.Text = "*** Debe de llenar todos los campos de la partida y los datos deben de ser los adecuados. ***"
End Try
End Sub
Y este es para eliminar el registro al darle clic en su boton:
Código:
Protected Sub GV_carrito_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GV_carrito.RowDeleting
Try
objDT = Session("myCarrito")
objDT.Rows(e.RowIndex).Delete()
Session("myCarrito") = objDT
Me.GV_carrito.DataSource = objDT
Me.GV_carrito.DataBind()
Me.lb_ODC_pesos.Text = total_mx()
Me.lb_ODC_dolares.Text = total_dlls()
Me.lb_odc_2.Text = total_2()
Me.lb_odc_3.Text = total_3()
Me.lb_odc_5.Text = total_5()
Me.lb_odc_9.Text = total_9()
Me.lb_saldo_2.Text = saldo_2()
Me.lb_saldo_3.Text = saldo_3()
Me.lb_saldo_5.Text = saldo_5()
Me.lb_saldo_9.Text = saldo_9()
Catch ex As Exception
Me.labelerror.Text = "ERROR: " & ex.Message
End Try
End Sub
Muchisimas gracias!!!