Datos mediante bindgsource

17/05/2007 - 17:11 por ANT1 | Informe spam
Hola a todos.

Estoy desarrollando una aplicacion windows de facturacion en la que
tengo un formulario al que le paso una instancia de la clase Cliente
(con los datos propios como nombre, apellidos y demas) que utilizo
como datasource para un bindingsource.

Los distintos elementos del formulario que usan dicho bindingsource
toman los datos correspondientes, funcionando correctamente como es de
esperar.

Lo curioso esta que entre los parametros bindeados hay un grupo de
ellos que cuando modifico cualquier otro campo automaticamente, y si
han sido modificados previamente, toman el valor que tenian al
principio, al generar el formuario. Esto ocurre con tres propiedades
concretas bindeadas de la instancia Cliente y toman el valor original
modique lo que modifique en el formulario, incluso valores que no
estan ni bindeados con dicha fuente.

¿Porque estos campos retoman el valor original automaticamente cuando
se enfoca a otro elemento del formulario? He estado mirando y no hay
ningun evento ni nada que modifique esos valores.

Preguntas similare

Leer las respuestas

#1 Clara
17/05/2007 - 18:40 | Informe spam
Hola,
A mi me pasaba algo similar.
El binding lo hacía así:
txtP.DtaBindings.Add("Text", Cliente, "strNombre")
Esto me pasaba con aquellas propiedades de la clase definidas cono
<nullable>, y se solucionó añadiendo el parámetro true al binding.
O sea, que pasó a ser
txtP.DtaBindings.Add("Text", Cliente, "strNombre", true)

No sé si será lo mismo

"ANT1" escribió en el mensaje
news:
Hola a todos.

Estoy desarrollando una aplicacion windows de facturacion en la que
tengo un formulario al que le paso una instancia de la clase Cliente
(con los datos propios como nombre, apellidos y demas) que utilizo
como datasource para un bindingsource.

Los distintos elementos del formulario que usan dicho bindingsource
toman los datos correspondientes, funcionando correctamente como es de
esperar.

Lo curioso esta que entre los parametros bindeados hay un grupo de
ellos que cuando modifico cualquier otro campo automaticamente, y si
han sido modificados previamente, toman el valor que tenian al
principio, al generar el formuario. Esto ocurre con tres propiedades
concretas bindeadas de la instancia Cliente y toman el valor original
modique lo que modifique en el formulario, incluso valores que no
estan ni bindeados con dicha fuente.

¿Porque estos campos retoman el valor original automaticamente cuando
se enfoca a otro elemento del formulario? He estado mirando y no hay
ningun evento ni nada que modifique esos valores.
Respuesta Responder a este mensaje
#2 ANT1
18/05/2007 - 17:13 | Informe spam
Hola Clara.

Me temo que el foro se ha comido toda una contestacion que te di a tu
entraada.

Primero gracias por contestar, no se me habia ocurrido ni por asomo
comprobar esa parte de codigo ya que es autogenerada por las
herramientas de VS2005. Por desgracia he comprobado que esta igual que
tu dices, con la opcion a true.

He estado mirando dicho constructor para añadir databindings y poca
informacion he podido encontrar, ahora si que he visto un posible
cuarto parametro del tipo DataSourceUpdateMode. Tampoco he podido
encontrar mucha informacion de este pero tiene toda la pinta de ser el
motivo de dicho problema, y si no un parametro que podria aportar
mucho a la hora de programar los binding. Tendre que mirar mas
informacion acerca de el.

Respecto al problema yo lo he solucionado de otra manera. Permiteme
ponerte un ejemplo sencillo para verlo mas claro.

Imagina un formulario al que pasas una instancia de la clase Cliente
denominada cliente1 para ser editada. Dicha clase tiene la propiedad
Nombre que en esta instancia, clase1, tiene el valor "Juan". Se bindea
dicha instancia sobre los distintos textbox del formulario
rellenandose correctamente cada uno con sus datos. Ademas de dichos
text box tienes un combo con una serie de valores para el nombre,
combox1.

Yo hasta el momento lo que hacia era controlar el evento
combox1selecteditemchanged de la siguiente manera:

private void comboBox1_SelectedIndexChanged(object sender,
EventArgs e)
{
NombreTextBox.Text = comBox1.SelectedItem;
// NombreTextBox es el textbox al que esta bindeada la
propiedad Nombre de Cliente.
}

Como ves lo que hacia era modificar el valor de la propiead Text del
textbox. Imagina que cambiabas el valor del combobox1 a "Diego", por
ejemplo, como se cambia el valor del combobox se pasa por el
controlador del evento y por tanto NombreTextBox tomaria el valor
"Diego". Pues bien, al seguir trabajando con el resto de elementos del
formulario es como si el binding hiciera un refresh concreto solo de
ese textbox y retomaba el valor original "Juan". No entiendo por que.

Lo he solucionado cambiando el codigo de la siguiente manera:

private void comboBox1_SelectedIndexChanged(object sender,
EventArgs e)
{
cliente1.Nombre = comboBox1.SeletedItem;
NombreTextBox.Text = cliente1.Nombre;
}

Como ves en este caso lo que hago es actualizar la propiedad de la
instancia y el valor del textbox.

Es curioso pero de la manera anterior, modificando el valor
programaticamente, no se llegaba a actualizar el objeto bindeado,
mientras que editando los textbox desde el formulario, lo que haria el
usuario final, el objeto bindeado si que toma las modificaciones en
sus valores.

Supongo que esto se deba a algun evento que se lanza junto con los
beguinedit y demas del textbox, pero no entiendo el por que.

Un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida