none
Elimiar un registro RRS feed

  • Pregunta

  • Hola buenos días tengo un datagridvien  con  2 texbox que relleno con texto y un boton para eliminar registro del datagrid que tengo en un formulario. Lo que quiero es que me borre el registro que escribo en los texbox   pero meda este erro,  Información adicional: Update requiere que DeleteCommand sea válido cuando se pasa la colección DataRow con filas eliminadas.    a que es debido esto. ¿Cómo poder solucionarlo,  dejo el código que utilizo Gracias de antemano
     Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    
    
            TextBox1.Visible = True
            TextBox2.Visible = True
            Label1.Visible = True
            Label2.Visible = True
            If TextBox1.Text = "" Or TextBox2.Text = "" Then
                MessageBox.Show("Nombre y clave debe contener Texto o numeros", "Atención")
                Exit Sub
            End If
           
            Dim msg As String
            Dim title As String
            Dim style As MsgBoxStyle
            Dim response As MsgBoxResult
            msg = "?Quieres Darse de baja?"
            style = MsgBoxStyle.DefaultButton3 Or _
               MsgBoxStyle.Exclamation Or MsgBoxStyle.YesNo
            title = "Darse de baja"
    
            response = MsgBox(msg, style, title)
    
    
            If response = MsgBoxResult.Yes Then
                For i As Integer = 0 To Me.UsuariosDataGridView.Rows.Count - 2
                    For x As Integer = 0 To UsuariosDataGridView.ColumnCount - 1
                        If UsuariosDataGridView.Rows(i).Cells(x).Value.ToString.Contains(Me.TextBox2.Text) Then
                            Me.UsuariosDataGridView.CurrentCell = UsuariosDataGridView.Rows(i).Cells(x)
    
                            Me.UsuariosDataGridView.Rows.Remove(UsuariosDataGridView.CurrentRow)
                            Me.Validate()
                            Me.UsuariosBindingSource.EndEdit()
                            Me.TableAdapterManager.UpdateAll(Me.Database1DataSet1)
                            Me.UsuariosTableAdapter.Fill(Me.Database1DataSet1.Usuarios)
    
                            Close()
                            Exit Sub
                        Else
                        End If
                    Next x
                Next i
            Else
                Me.UsuariosTableAdapter.Fill(Me.Database1DataSet1.Usuarios)
                Close()
            End If
        End Sub

    jueves, 28 de junio de 2018 8:53

Todas las respuestas

  • [...] Update requiere que DeleteCommand sea válido cuando se pasa la colección DataRow con filas eliminadas.    a que es debido esto.

    Ese error se dabe a que has llamado al método Update de un DataAdapter, pero el DataAdapter no estaba suficientemente bien configurado. Nótese que aunque tú no lo llames expresamente, puede estar siendo llamado de manera interna. En tu caso particular, casi seguro que el error debe estar ocurriendo en la línea donde llamas al TableAdapterManager.UpdateAll, porque eso a su vez invoca el Update del DataAdapter interno del TableAdapter.

    ¿Qué es eso que digo de que "el DataAdapter no estaba suficientemente bien configurado"? Para entenderlo, hay que saber que lo que hace el dataAdapter es examinar la colección de filas que le llegan en el DataTable, y por cada fila mira si la fila es nueva, modificada o borrada. Según el tipo de fila, envía a la base de datos un comando Insert, Update o Delete. Para poder enviar eso, utiliza la sentencia que internamente tenga almacenada en si InsertCommand, UpdateCommand o DeleteCommand. Estas tres sentencias debieron haber sido configuradas antes de llamar al Update.

    Además de esos tres Commands, el DataAdapter también tiene un SelectCommand, que es el que se usa cuando llamas al método Fill para cargar los datos desde la base de datos. Si sólo está configurado el SelectCommand, el DataAdapter funcionará perfectamente cuando lees los datos, y te aparecerán los datos en el Grid sin ninguna dificultad. pero si le faltan los otros tres Commnds (o son erróneos) se producirá un error como el que estás viendo en el momento de salvar los cambios.

    La solución es, obviamente, configurar valores correctos en los Commands que no los tienen. En teoría, esto debió suceder automáticamente al crear el TableAdapter desde el diseñador gráfico de Visual Studio, a condición de que los datos provengan de una única tabla y no tengan Joins ni Group By ni nada por el estilo. Pero si la Select es compleja, el diseñador no sabe crear los comandos de modificación, y tienes que configurarlos a mano (cosa que es compleja y requiere un conocimiento profundo de cómo está estructurada tu consulta y tus tablas y qué debe actualizarse y cómo, no es algo que alguien te pueda solucionar sin conocer tu consulta select, tu estructura de tablas, y el criterio de actualización).

    jueves, 28 de junio de 2018 10:35