PropertyManager y CurrencyManager

13/07/2005 - 09:31 por Enric | Informe spam
Hola,

He estado viendo las clases PropertyManager y CurrencyManager, y he llegado
a la conclusión de que la primera sirve para el enlace con fuente de datos
de un solo registro, y la segunda con fuentes con varios registros (o que
implementen IList).
Pero, si tengo un dataTable llenado con un solo registro (los registros de
esta tabla estan filtrados a partir de su clave primaria), veo que se sigue
creando un CurrencyManager.

El problema es que tengo un formulario con muchos textBox enlazados asi:
txtq.databindings.add("Text", _provision.tables["provisiones"], "codigo");

pero a la hora de grabar, el DataSet.HasChanges() siempre devuelve false
aunque se hayan modificado todos.

He probado con
BindingContext[_provision, "provisiones"].position = 0; //SIEMPRE hay un
solo registro en la tabla

y nada. No funciona.
Alguien sabe qué estoy haciendo mal?

grácias

Preguntas similare

Leer las respuestas

#1 Julio Casal
14/07/2005 - 07:14 | Informe spam
Hola Eric. Mira, lo que sucede es que no le estás dando la oportunidad al
mecanismo de databinding para que haga su trabajo, ya que al tener solo un
registro, pues nunca estás cambiando de registro y los cambios no se
asientan. Te recomiendo hagas lo siguiente:

Captura el contexto de enlace con algo así:
Dim cm As CurrencyManager = DirectCast(Me.BindingContext(_provision,
"provisiones"), CurrencyManager)

Cuando vayas a hacer un nuevo registro, solicita uno así:
cm.AddNew()

Y cuando ya hayas terminado de hacer los cambios, ejecuta esto:
cm.EndCurrentEdit()

Espero aquello pueda ayudarte amigo.

Saludos.

Julio Casal
.Net Solution Developer
MCAD
Grupo Lebed


"Enric" wrote:

Hola,

He estado viendo las clases PropertyManager y CurrencyManager, y he llegado
a la conclusión de que la primera sirve para el enlace con fuente de datos
de un solo registro, y la segunda con fuentes con varios registros (o que
implementen IList).
Pero, si tengo un dataTable llenado con un solo registro (los registros de
esta tabla estan filtrados a partir de su clave primaria), veo que se sigue
creando un CurrencyManager.

El problema es que tengo un formulario con muchos textBox enlazados asi:
txtq.databindings.add("Text", _provision.tables["provisiones"], "codigo");

pero a la hora de grabar, el DataSet.HasChanges() siempre devuelve false
aunque se hayan modificado todos.

He probado con
BindingContext[_provision, "provisiones"].position = 0; //SIEMPRE hay un
solo registro en la tabla

y nada. No funciona.
Alguien sabe qué estoy haciendo mal?

grácias




Respuesta Responder a este mensaje
#2 Enric
14/07/2005 - 10:41 | Informe spam
Hola Julio.
Muchas gracias por tu respuesta.

Desgraciadamente, sigue sin funcionarme.
Lo curioso, es que depurando, observo que los valores en el dataset
subyacente se actualizan a medida que modifico los valores en los textbox.
El problema, es que aún habiendo cambiado los valores del DataSet, este
siempre devuelve DataSet.HasChanges() = false
(no hago AcceptChanges() ni nada)

Enric


"Julio Casal" escribió en el mensaje
news:
Hola Eric. Mira, lo que sucede es que no le estás dando la oportunidad al
mecanismo de databinding para que haga su trabajo, ya que al tener solo un
registro, pues nunca estás cambiando de registro y los cambios no se
asientan. Te recomiendo hagas lo siguiente:

Captura el contexto de enlace con algo así:
Dim cm As CurrencyManager = DirectCast(Me.BindingContext(_provision,
"provisiones"), CurrencyManager)

Cuando vayas a hacer un nuevo registro, solicita uno así:
cm.AddNew()

Y cuando ya hayas terminado de hacer los cambios, ejecuta esto:
cm.EndCurrentEdit()

Espero aquello pueda ayudarte amigo.

Saludos.

Julio Casal
.Net Solution Developer
MCAD
Grupo Lebed


"Enric" wrote:

> Hola,
>
> He estado viendo las clases PropertyManager y CurrencyManager, y he


llegado
> a la conclusión de que la primera sirve para el enlace con fuente de


datos
> de un solo registro, y la segunda con fuentes con varios registros (o


que
> implementen IList).
> Pero, si tengo un dataTable llenado con un solo registro (los registros


de
> esta tabla estan filtrados a partir de su clave primaria), veo que se


sigue
> creando un CurrencyManager.
>
> El problema es que tengo un formulario con muchos textBox enlazados asi:
> txtq.databindings.add("Text", _provision.tables["provisiones"],


"codigo");
>
> pero a la hora de grabar, el DataSet.HasChanges() siempre devuelve false
> aunque se hayan modificado todos.
>
> He probado con
> BindingContext[_provision, "provisiones"].position = 0; //SIEMPRE hay un
> solo registro en la tabla
>
> y nada. No funciona.
> Alguien sabe qué estoy haciendo mal?
>
> grácias
>
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida