Releer un registro en un DataSet

14/02/2008 - 17:26 por Jose Plus42 | Informe spam
Aquí seguimos peleándonos con el C# y el acceso a datos.

Tengo un DataSet sobre el que estoy navegando (con mi BindingSource,
TableAdapter, AdapterManager, BindingNavigator, ...).
La base de datos es SQL Express. En un momento dado lanzo un Stored
Procedure que modifica el registro actual (p.e. recalcula el total de
una factura).
El problema es que no encuentro la forma correcta de refrescar los datos.

Tengo un código parecido a este:

DSEjemplo.FacturasRow row =
DSEjemplo.Facturas[facturasBindingSource.Position];

facturasTableAdapter.RecalculaFactura(row.PK);

tableAdapterManager.UpdateAll(dSEjemplo);

Si abro una nueva ventana veo el total de la factura actualizado (la
llamada a RecalculaFactura funciona ok), pero en la ventana original, da
igual que salga del registro y vuelva a entrar, la tabla en memoria no
se ha enterado del cambio realizado en la base de datos.

¿como haría para obligarle a releer ese registro en concreto?

Al hilo de esto, si yo quiero poner un botón "refrescar" una solución
sería almacenar la posición actual (clave primaria del registro), llamar
al método Fill ( facturasTableAdapter.Fill(dSEjemplo.Facturas); ) y
volver a posicionarme en el registro original. ¿alguna forma mejor de
hacerlo?
 

Leer las respuestas

#1 Jesús López
15/02/2008 - 11:44 | Informe spam
Para releer o refrescar un registro tendrías que utilizar una instrucción
SELECT parametrizada con la clave primaria en la cláusula WHERE. Configuras
un DataAdapter con esa select, estableces el valor de los parámetros y luego
usas el método Fill del dataadapter pasándole el datatable que contiene la
fila a refrescar.

Saludos:

Jesús López



"Jose Plus42" escribió en el mensaje
news:OK$
Aquí seguimos peleándonos con el C# y el acceso a datos.

Tengo un DataSet sobre el que estoy navegando (con mi BindingSource,
TableAdapter, AdapterManager, BindingNavigator, ...).
La base de datos es SQL Express. En un momento dado lanzo un Stored
Procedure que modifica el registro actual (p.e. recalcula el total de una
factura).
El problema es que no encuentro la forma correcta de refrescar los datos.

Tengo un código parecido a este:

DSEjemplo.FacturasRow row =
DSEjemplo.Facturas[facturasBindingSource.Position];

facturasTableAdapter.RecalculaFactura(row.PK);

tableAdapterManager.UpdateAll(dSEjemplo);

Si abro una nueva ventana veo el total de la factura actualizado (la
llamada a RecalculaFactura funciona ok), pero en la ventana original, da
igual que salga del registro y vuelva a entrar, la tabla en memoria no se
ha enterado del cambio realizado en la base de datos.

¿como haría para obligarle a releer ese registro en concreto?

Al hilo de esto, si yo quiero poner un botón "refrescar" una solución
sería almacenar la posición actual (clave primaria del registro), llamar
al método Fill ( facturasTableAdapter.Fill(dSEjemplo.Facturas); ) y volver
a posicionarme en el registro original. ¿alguna forma mejor de hacerlo?

Preguntas similares