Visual Basic.NET - LoadDataRow con Primary Key

 
Vista:

LoadDataRow con Primary Key

Publicado por Sheila (28 intervenciones) el 31/08/2004 11:12:32
Hola a todos!
Tengo un procedimiento que utilizo para actualizar un fila de un datagrid, es decir, un usuario hace doble click sobre una fila del mismo y ésta puede ser actualizada, pero lo único que consigo es que se añada una nueva línea al datagrid no que se actualice. El código que utilizo es:

Dim newRow(9) As Object
'aquí indico que la clave principal es CodArticulo que se correponde con
'esa posición en la matriz newRow
myTable.PrimaryKey = newRow(2)

newRow(0) = xId
newRow(2) = Me.txtCodArticulo.Text
newRow(3) = Me.txtCantidad.Text
newRow(4) = Me.txtDescripcion.Text
newRow(5) = Me.txtPVD.Text
newRow(7) = Me.txtArtIva.Text
newRow(8) = Me.txtArtDcto.Text
newRow(9) = CDbl(Me.txtPVP.Text)

Dim myRow As DataRow

myTable.BeginLoadData()
myRow = myTable.LoadDataRow(newRow, True)
myTable.EndLoadData()

¿me falta algo?

Gracias por vuestra ayuda.

Un saludo.
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

RE:LoadDataRow con Primary Key

Publicado por Edgar (1501 intervenciones) el 31/08/2004 15:13:31
Hola

El problema es que estás creando un nuevo DataRow, lo que sucede con el método LoadDataRow es que este compara la fila no por la clave primaria sino por la referencia del objeto... es decir, que si tu creas una nueva fila esta se agregará... para lograr lo que tu deseas debes ubicar la fila, modificarla y luego invocar el método

Saludos
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

RE:LoadDataRow con Primary Key

Publicado por Sheila (28 intervenciones) el 31/08/2004 16:00:11
Hola Edgar!
Gracias por tu ayuda, pero te importaría ponerme algún ejemplillo para enterarme mejor ... :-)
Es decir, tu dices que busque primero (select) la fila a modificar en la tabla y luego llamar a LoadDataRow, no?
Gracias.
Un saludo
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

RE:LoadDataRow con Primary Key

Publicado por Edgar (1501 intervenciones) el 31/08/2004 16:03:53
Hola..

Exactamente.. eso te puede servir....

Saludos
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

Sin mucha idea

Publicado por Sheila (28 intervenciones) el 31/08/2004 16:36:46
Hola Edgar!
No consigo que me funcione, :-( A ver si me puedes ayudar, probablemente sea sencillo pero no llevo mucho con vb.net y no sé cómo hacerlo. Te envío el código que he utilizado:

Dim strBusqueda As String
strBusqueda = "codArticulo = '" + Me.txtCodArticulo.Text + "'"

Dim dv As DataView
Dim dt As DataTable

dt = myTable
dv = dt.DefaultView
dv.RowFilter = strBusqueda

'Creo un array con los valores a insertar
Dim values(9) As Object

' Añado los valores al array
values(0) = xId
values(2) = Me.txtCodArticulo.Text + ""
values(4) = Me.txtDescripcion.Text + ""

myTable.BeginLoadData()
dt.LoadDataRow(values, True)
myTable.EndLoadData()

Con este código, me mantiene la fila a modificar y me inserta una nueva con los nuevos datos, eliminando el resto de filas.
Me puedes ayudar?
Gracias
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

RE:Sin mucha idea

Publicado por Edgar (1501 intervenciones) el 31/08/2004 16:58:00
Hola

Creo que la solución es que enlaces los textbox xon un origen de datos.. esto lo haces asi..

txtCodArticulo.DataBindings.Add("Text", dt, "CodArticulo")

El origen de datos debe ser el mismo del grid.. es decir, si estas mostrando los datos de la vista debes colocar dv en vez de dt.

Con esto habrás enlazado el textbox a la tabla, de tal manera que al posicionarte en una fila del grid se mostrarán los datos en los textboxs, por lo que sucederá también que cualquier modificación que hagas sobre los cuadros de texto se reflejarán en la vista y en el grid

Saludos
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

Funciona pero... como guardo los cambios?

Publicado por Sheila (28 intervenciones) el 31/08/2004 17:45:33
Hola Edgar!
Muchas gracias por tu ayuda, ya me actualiza bien el datagrid, el problema es que yo antes modificaba el Me.DSDatos.Tables("Tabla") y grababa en él los datos, pero ahora no sé como pasarlos del datagrid al Me.DSDatos.Tables("Tabla"). No se si me he explicado bien, yo guardaba los cambios del datagrid detalle preguntando:

If DSDatos.HasChanges(DataRowState.Modified) Then

pero ahora ya no puedo preguntar si DsDatos ha tenido cambios ya que cargo así el datagrid:

Dim bm As BindingManagerBase = Me.DG.BindingContext(Me.DG.DataSource, Me.DG.DataMember)
Dim Fila As DataRow = CType(bm.Current, DataRowView).Row

txtCodArticulo.DataBindings.Add("Text", Me.DG.DataSource, "CodArticulo")
txtDescripcion.DataBindings.Add("Text", Me.DG.DataSource, "Descripcion")
txtCantidad.DataBindings.Add("Text", Me.DG.DataSource, "Cantidad")

¿alguna ídea?

Muchas gracias Edgar por tu ayuda.
Un saludo
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

No funciona al insertar una nueva fila

Publicado por Sheila (28 intervenciones) el 31/08/2004 18:16:11
Hola Edgar!
Perdón, te había dicho que funcionaba pero en realidad solo funciona cuando se modifica una fila del datagrid, no cuando inserto una nueva.
Alguna ídea?
Gracias
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

Ya funciona el insertar pero...

Publicado por Sheila (28 intervenciones) el 31/08/2004 18:35:02
Hola!
Ya he arreglado lo de insertar nueva fila en el datagrid, pero sigo con el mismo problema de que al modificar una fila del datagrid, no puedo almacenar los datos en la tabla.
¿alguna idea?
gracias
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

RE:Ya funciona el insertar pero...

Publicado por jvirgo (27 intervenciones) el 31/08/2004 22:09:46
Hola
no es una respuesta sino una consulta.
tengo problemas con insertar una fila en un datagrid y creo que tu ya lo has resuelto me prodiras enviar un ejemplo de como hacerlo.
gracias
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

Para jvirgo, código de inserción

Publicado por Sheila (28 intervenciones) el 01/09/2004 08:08:17
Hola jvirgo!
El código que utilizo para insertar una fila en un datagrid es el siguiente:

'Creo una nueva fila y le asigno los valores
Dim myRow As DataRow
myRow = Me.DSDatos.Tables("Tabla").NewRow

'CodArticulo, Descripcion,... son los nombres de las columnas de mi
'datagrid
myRow("CodArticulo") = Me.txtCodArticulo.Text + ""
myRow("Descripcion") = Me.txtDescripcion.Text + ""
myRow("Cantidad") = Me.txtCantidad.Text
myRow("PVP") = CDbl(Me.txtPVP.Text)
myRow("Dcto") = CDbl(Me.txtArtDcto.Text)
myRow("IVA") = CDbl(Me.txtArtIva.Text)

Me.DSDatos.Tables("Tabla").Rows.Add(myRow)

Bueno, espero que te sirva, ya me contarás.

Un saludo,
Sheila.
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

Funciona por fin!!!

Publicado por Sheila (28 intervenciones) el 01/09/2004 10:08:02
Hola Edgar!
Bueno como te comenté ayer a última hora que ya me funcionaba el insertar, hoy, después de toda la mañana dándole vueltas, he conseguido que me funcione que, al modificar la línea del datagrid esta después se grabe a la tabla detalles.
Te comento que he tenido que eliminar:

txtCodArticulo.DataBindings.Add("Text", Me.DG.DataSource, "CodArticulo")
...etc.
ya que me daba error si, después de modificar una fila del DG, quería modificar otra.
Lo he sustituído por:
Dim bm As BindingManagerBase = Me.DG.BindingContext(Me.DG.DataSource, Me.DG.DataMember)
Dim Fila As DataRow = CType(bm.Current, DataRowView).Row

Me.txtCodArticulo.Text = Fila("CodArticulo")
Me.txtCantidad.Text = Fila("Cantidad")
Me.txtDescripcion.Text = Fila("Descripcion")
Me.txtPVP.Text = Fila("PVP")

Bueno, por ahora no he encontrado errores quién sabe si una vez que haga más pruebas... :-)

Bueno, pues solo quería agradecer tu ayuda.

Un saludo.
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

RE:Para jvirgo, código de inserción

Publicado por jvirgo (27 intervenciones) el 02/09/2004 21:28:23
gracias sheila por la ayuda si funciona si funciona
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