Foros del Web » Programación para mayores de 30 ;) » .NET »

Eliminar un Row en un DataGrid Windows Form

Estas en el tema de Eliminar un Row en un DataGrid Windows Form en el foro de .NET en Foros del Web. Hola compañeros!!!! Introducción Estoy desarrollando en VB .NET 2005 una aplicación para una PDA que se comunica a un archivo X.sdf (que es como una ...
  #1 (permalink)  
Antiguo 21/05/2010, 12:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 22
Antigüedad: 15 años, 5 meses
Puntos: 0
Exclamación Eliminar un Row en un DataGrid Windows Form

Hola compañeros!!!!

Introducción

Estoy desarrollando en VB .NET 2005 una aplicación para una PDA que se comunica a un archivo X.sdf (que es como una BD movil), esta aplicacion es para toma de inventarios.

Problema

Estoy realizando una pantalla para eliminar registros del archivo X.sdf, en la tabla me lista los artículos registrados, y SI me elimina (del archivo) un articulo seleccionado de la tabla. El problema es al querer "Refrescar" la tabla y que ya no me muestre el registro que se eliminó.

Mi codigo que manda llamar el carga datos:
Código:
' En el metodo Load
     Private Sub frmEliminar_Load(ByVal sender As System.Object, ByVal e As             System.EventArgs) Handles MyBase.Load
        carga_Datos()
    End Sub
Mi codigo del carga_Datos():
Código:
    Private Sub carga_Datos()
        Dim dsTemporal As DataSet
        Me.Activate()
        Me.Enabled = False
        If Not Me.grdArticulos.DataSource Is Nothing Then
            MessageBox.Show("No esta vacio")
            dsTemporal = New DataSet
            Me.grdArticulos.DataSource = dsTemporal
        Else
            MessageBox.Show("Esta vacio")
        End If
        Try
            Dim espere As New frmEspere()
            Me.Enabled = False
            espere.Show()
            espere.Cambia_Mouse(True)
            espere.Activate()
            ConexionesDatos.listar_Articulos(Me.grdArticulos)
            espere.Cambia_Mouse(False)
            espere.Close()
            ManejoSonidos.PlaySoundFile("\My documents\encontrado.wav")
            Me.Enabled = True
            pintaTabla()
        Catch ex As Exception
            MessageBox.Show("No se pudo listar los Articulos. Datos del error: " + ex.Message + " " + ex.StackTrace)
            frmEspere.Cambia_Mouse(False)
            ManejoSonidos.PlaySoundFile("\My documents\no_encontrado.wav")
            Me.Enabled = True
        End Try
    End Sub

Mi código que lista los articulos es:
Código:
'lista todos los articulos capturados en toma de inventarios
    Public Sub listar_Articulos(ByVal tabla As System.Windows.Forms.DataGrid)

        Dim conexionRealizada As Boolean
        Dim loConexion As New SqlCeConnection
        Dim loDataSet As New DataSet
        Dim loDataAdapter As New SqlCeDataAdapter

        Configura_Conexion()

        Try
            loConexion = New SqlCeConnection(ConexionesDatos.regresaConexion())
            loDataAdapter = New SqlCeDataAdapter( _
                    "SELECT DISTINCT t.toma, " + _
                            "t.articulo, " + _
                            "t.cantidad, " + _
                            "a.descripcion " + _
                     "FROM Tomas_Inventarios t, Articulos a " + _
                     "WHERE t.articulo = a.articulo " + _
                     "ORDER BY t.cantidad ASC", _
                     loConexion)

            loDataSet.Reset()
            loDataAdapter.Fill(loDataSet, "Tomas_Inventarios")
            tabla.DataSource = loDataSet.Tables("Tomas_Inventarios")
            conexionRealizada = True
        Catch ex As Exception
            MessageBox.Show("No hay artículos...")
            ManejoSonidos.PlaySoundFile("\My documents\no_encontrado.wav")
        End Try
    End Sub
Mi codigo que elimina:
Código:
Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        elimina_Renglon()
    End Sub

    Private Sub elimina_Renglon()
        Dim datos As New DataSet
        Dim lcToma, _
            lcArticulo, _
            lcCantidad As String
        Dim opcion As Integer

        lcToma = grdArticulos.Item(grdArticulos.CurrentCell.RowNumber, 0).ToString()
        lcArticulo = grdArticulos.Item(grdArticulos.CurrentCell.RowNumber, 1)
        lcCantidad = grdArticulos.Item(grdArticulos.CurrentCell.RowNumber, 2)
        opcion = MsgBox("¿Está seguro que desea borrar el registro?" + _
                        vbCrLf + vbCrLf + _
                        "Artículo " + lcArticulo + vbCrLf + _
                        "Cantidad " + lcCantidad + vbCrLf + _
                        "Toma " + lcToma, _
                        4 + 32 + 256)

        If opcion = vbYes Then 'Si es el botón Si
            elimina_Articulo(lcToma)
            carga_Datos()
        End If
    End Sub
Codigo donde me marca error:
Código:
    Private Sub pintaTabla()
        Dim grdTEstilo As New DataGridTableStyle
        grdTEstilo.MappingName = "Tomas_Inventarios" ' <---- SEGUN LA EXCEPCION AQUI ESTA EL ERROR
        Me.grdArticulos.TableStyles.Add(grdTEstilo)
        grdTEstilo.GridColumnStyles(0).Width = 0
        grdTEstilo.GridColumnStyles(1).Width = 60
        grdTEstilo.GridColumnStyles(2).Width = 40
        grdTEstilo.GridColumnStyles(3).Width = 190
    End Sub

Lo único que quiero es después de eliminar, me quite el articulo del DataGrid, no importa que sea fea la solución, (intente ponerle Visible = false pero no encontré la propiedad). Ya que si elimina del archivo, y si se actualiza en la BD del Servidor.

Por favor me urge T______________________T

NOTA: Busque en todo el foro y nada de lo que encontré me sirvió, por eso me atreví a hacer un tema.

Saludos!
  #2 (permalink)  
Antiguo 21/05/2010, 15:14
Avatar de Darkavender  
Fecha de Ingreso: septiembre-2008
Ubicación: SLV
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Eliminar un Row en un DataGrid Windows Form

yo realizo el proceso asi...

Primero
Cargo datos al grid

Segundo
Elimino Row

Tercero
Recargo el grid [Logicamente ya vendra con los cambios aplicados]
  #3 (permalink)  
Antiguo 21/05/2010, 16:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 22
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Eliminar un Row en un DataGrid Windows Form

Serias muy amable de ponerme un código ejemplo?

Se supone que yo lo hago asi:
  1. Consulto el archivo
  2. Cargo los datos al grid
  3. El usuario selecciona el articulo a eliminar
  4. Da clic en el boton de "eliminar"
  5. Borro el articulo del archivo
  6. Actualizo el grid volviendo a consultar el grid

En teoria al actualizar el grid consulto el grid, por lo cual deberia de mostrarme los articulos que estan en el archivo, lo cual no los muestra.

Si los elimina porque al salirme de la pantalla con un Hide() y volver a abrirla si se cargan los articulos ya sin el eliminado.

Ademas, al hacer la replica al servidor efectivamente no se replican los articulos eliminados.

Lo que requiero es o ya sea que exista una forma de ocultar el renglon del grid, o efectivamente volver a consultar el archivo y que no me marque el error...




Aun asi, gracias por tu pronta respuesta
  #4 (permalink)  
Antiguo 24/05/2010, 09:31
Avatar de Darkavender  
Fecha de Ingreso: septiembre-2008
Ubicación: SLV
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Eliminar un Row en un DataGrid Windows Form

No tengo experiencia en el manejo de app para pda...

Pero puedo ver a simple vista que tu problema esta en la parte de la elimimnacion del row...

podrias poner la porcion de codigo que usas para eliminar...

osea la funcion
Cita:
elimina_Articulo(lcToma)
  #5 (permalink)  
Antiguo 26/05/2010, 09:10
 
Fecha de Ingreso: octubre-2008
Mensajes: 22
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Eliminar un Row en un DataGrid Windows Form

Si claro aqui esta el codigo, aunque como lo mencioné anteriormente, si elimina el elemento del archivo, nomas no actualiza el datagrid =(

Código:
    Public Sub elimina_Articulo(ByVal toma As String)
        Dim strSQL, _
            lcToma As String
        Dim loConexion As SqlCeConnection
        Dim cmd As SqlCeCommand

        lcToma = toma

        Configura_Conexion()

        strSQL = "DELETE FROM Tomas_Inventarios " + _
                 "WHERE	toma = '" + lcToma + "'"

        Try
            loConexion = New SqlCeConnection(ConexionesDatos.regresaConexion())
            cmd = New SqlCeCommand(strSQL, loConexion)
            cmd.Connection.Open()
            cmd.ExecuteNonQuery()
            MessageBox.Show("Artículo Eliminado")
        Catch ex As Exception
            MessageBox.Show("No se pudo eliminar el artículo...")
            ManejoSonidos.PlaySoundFile("\My documents\no_encontrado.wav")
        End Try
    End Sub
Gracias!
  #6 (permalink)  
Antiguo 26/05/2010, 12:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 22
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Eliminar un Row en un DataGrid Windows Form

Yeiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii ya me salio

jajajajajaja disculpen la efusividad pero es que ya me tenia arta T_T.

Posteo aqui la solución para aquel pobre desarrollador (como yo) se llegue a topar con tremenda bronca.

El procedimiento a seguir es:
  1. Consultar en el archivo y listar en la pantalla los resultados
  2. El usuario selecciona el articulo y da clic en el botón Eliminar
  3. El sistema pregunta si esta seguro de eliminar el articulo, el usuario da OK
  4. El sistema Elimina el articulo de la tabla (almacenando en una variable el dato para eliminarlo en la BD) [ESTE ES LO NUEVO DE MI CODIGO]
  5. El sistema obtiene el valor almacenado en una variable y lo elimina del archivo
  6. FIN =D

El cacho de código es este:
Código:
 'Metodo que elimina el registro del DataGrid

    Private Sub elimina_Registro(ByVal lnRenglon As Integer)
        Dim tablaTemporal As DataTable
        Dim rowsTemporales As DataRowCollection

        tablaTemporal = CType(Me.grdArticulos.DataSource, DataTable)
        rowsTemporales = tablaTemporal.Rows

        'Se verifica que tenga datos la coleccion
        If rowsTemporales.Count() <> 0 Then
            rowsTemporales.RemoveAt(lnRenglon)
        End If
    End Sub 
Mi código quedaría de la siguiente forma (lo negrito es lo nuevo):
Código:
 Private Sub elimina_Renglon()
        Dim datos As New DataSet
        Dim lcToma, _
            lcArticulo, _
            lcCantidad As String
        Dim lcOpcion, _
            lnRenglon As Integer

        lnRenglon= Me.grdArticulos.CurrentCell.RowNumber
        lcToma = grdArticulos.Item(lnRenglon, 0).ToString()
        lcArticulo = grdArticulos.Item(lnRenglon, 1)
        lcCantidad = grdArticulos.Item(lnRenglon, 2)
        lcOpcion = MsgBox("¿Está seguro que desea borrar el registro?" + _
                        vbCrLf + vbCrLf + _
                        "Artículo " + lcArticulo + vbCrLf + _
                        "Cantidad " + lcCantidad + vbCrLf + _
                        "Toma " + lcToma, _
                        4 + 32 + 256)

        If lcOpcion = vbYes Then 'Si es el botón Si
            elimina_Registro(lnRenglon)
            elimina_Articulo(lcToma)
        End If
    End Sub 
Los demas metodos no fueron modificados.

La solución la encontré en esta pagina: [URL="http://msdn.microsoft.com/en-us/library/teb6sba6(vs.71).aspx"]DataRowCollection.RemoveAt Method[/URL]

Espero le entiendan ya que si me esmeré en explicarlo XD.

Gracias por su ayuda y tiempo compañeros!!!!!! LOV YA!!!!!

Última edición por patitox04; 26/05/2010 a las 12:14

Etiquetas: datagrid, eliminar, row, windows, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:06.