ADO .NET

01/03/2005 - 00:46 por Pedro Rivera | Informe spam
La situación es la siguiente: Tengo un DataGrid (puede
ser cualquier control) mostrando las filas de una Tabla
de una base de datos realizada en Access 2000 con el
motor Microsoft Jet. Lo que deseo hacer es: Agregar y
eliminar todas las filas que quiera (poder eliminarlas
aunque las acabe de agregar y no haya llamado a
AceptChanges) y al final, tener la opción de aceptar o
rechazar los cambios realizados en el origen de datos.
Hasta ahora, para casi lograrlo tengo que actualizar el
origen de datos cada vez que agrego o elimino una fila,
pero yo quiero poder hacerlo "de a muchas filas a la
vez". Este es el código que utilizo, ¿Alguien puede
decirme que está mal?



Lo más que sé del problema es esto: He monitoreado el
estado de las filas y me encuentro que, si tengo por
ejemplo 5 filas y borro la fila tres, lógicamente la fila
cuatro que tenía el estado "Sin cambios", se vuelve la
fila tres, pero cambia su estado a "eliminado" ¿Porqué?


Imports System.Data.OleDb
Imports System.Windows.Forms
Public Class Form1
Inherits System.Windows.Forms.Form

Private Conexion As OleDbConnection
Private Adaptador As OleDbDataAdapter
Private Base As DataSet


Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim i As Integer
Conexion = New OleDbConnection
Conexion.ConnectionString
= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
C:\Basededatos.mdb;"
Base = New DataSet
Base.Clear()
Dim Constructor As OleDbCommandBuilder
Conexion.Open()
Adaptador = New OleDbDataAdapter("SELECT*FROM
tabla1", Conexion)
Constructor = New OleDbCommandBuilder
(Adaptador)
Adaptador.Fill(Base, "tabla1")
Conexion.Close()
Me.DataGrid1.DataSource = Base
Me.DataGrid1.DataMember = "tabla1"
Catch ex As Exception
MessageBox.Show(ex.ToString)
Exit Sub
End Try
End Sub

Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim Fila As DataRow = Base.Tables
(0).NewRow
Base.Tables(0).Rows.Add(Fila)
End Sub

Private Sub Button2_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button2.Click
If Base.Tables(0).Rows.Count > 0 Then
Dim Fila As DataRow = Base.Tables(0).Rows
(Me.DataGrid1.CurrentCell.RowNumber)
Fila.Delete()
End If
End Sub

Private Sub Button3_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button3.Click
Try
Adaptador.Update(Base, "tabla1")
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

End Class
 

Leer las respuestas

#1 Guillermo guille
01/03/2005 - 16:20 | Informe spam
Ese es el problema de los "automatismos" que si tienen algún "fallillo",
pues...

Es muy fácil rellenar, por ejemplo, un ListView... o cualquier otro control,
que no tiene porqué estar necesariamente "ligado" a un dataTable o DataSet, de
esa forma puedes controlar lo que pasa, yo particularmente suelo usar un
listview al que asigno a la propiedad TAG la fila (dataRow) que estoy
mostrando, cuando el usuario borra elelemntos del listview, me encargo de
borrar los elementos del dataTable...

En estas páginas tengo unos ejemplos de esto que te comento:

Esta para Access:
http://www.elguille.info/NET/ADONET...Access.htm

y esta para SQL Server:
http://www.elguille.info/NET/ADONET/ejemploSQL.htm

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"Pedro Rivera" wrote in message
news:15ad01c51def$bd336b20$
La situación es la siguiente: Tengo un DataGrid (puede
ser cualquier control) mostrando las filas de una Tabla
de una base de datos realizada en Access 2000 con el
motor Microsoft Jet. Lo que deseo hacer es: Agregar y
eliminar todas las filas que quiera (poder eliminarlas
aunque las acabe de agregar y no haya llamado a
AceptChanges) y al final, tener la opción de aceptar o
rechazar los cambios realizados en el origen de datos.
Hasta ahora, para casi lograrlo tengo que actualizar el
origen de datos cada vez que agrego o elimino una fila,
pero yo quiero poder hacerlo "de a muchas filas a la
vez". Este es el código que utilizo, ¿Alguien puede
decirme que está mal?



Lo más que sé del problema es esto: He monitoreado el
estado de las filas y me encuentro que, si tengo por
ejemplo 5 filas y borro la fila tres, lógicamente la fila
cuatro que tenía el estado "Sin cambios", se vuelve la
fila tres, pero cambia su estado a "eliminado" ¿Porqué?


Imports System.Data.OleDb
Imports System.Windows.Forms
Public Class Form1
Inherits System.Windows.Forms.Form

Private Conexion As OleDbConnection
Private Adaptador As OleDbDataAdapter
Private Base As DataSet


Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim i As Integer
Conexion = New OleDbConnection
Conexion.ConnectionString
= "Provider=Microsoft.Jet.OLEDB.4.0;Data SourceC:\Basededatos.mdb;"
Base = New DataSet
Base.Clear()
Dim Constructor As OleDbCommandBuilder
Conexion.Open()
Adaptador = New OleDbDataAdapter("SELECT*FROM
tabla1", Conexion)
Constructor = New OleDbCommandBuilder
(Adaptador)
Adaptador.Fill(Base, "tabla1")
Conexion.Close()
Me.DataGrid1.DataSource = Base
Me.DataGrid1.DataMember = "tabla1"
Catch ex As Exception
MessageBox.Show(ex.ToString)
Exit Sub
End Try
End Sub

Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim Fila As DataRow = Base.Tables
(0).NewRow
Base.Tables(0).Rows.Add(Fila)
End Sub

Private Sub Button2_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button2.Click
If Base.Tables(0).Rows.Count > 0 Then
Dim Fila As DataRow = Base.Tables(0).Rows
(Me.DataGrid1.CurrentCell.RowNumber)
Fila.Delete()
End If
End Sub

Private Sub Button3_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button3.Click
Try
Adaptador.Update(Base, "tabla1")
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

End Class

Preguntas similares