none
Enlace de datos al control Combobox a través de la propiedad SelectedValue RRS feed

  • Pregunta

  • Hola,

    De antemano , muchas gracias por su valiosa respuesta.

    Mi problema es el siguiente. Tengo un formulario con controles enlazados a datos con Entity Framework, entre estos el combobox con el que tengo un problema especial al enlazar la propiedad selectedvalue a la propiedad foránea  (clienteID as string).

    combobox.datasource = BindingSourceCliente

    combobox.datamember= "nombre"

    combobox.valuemember = "codigo"

    combobox.SelectedValue = BindingSourceDoc - ClienteID

    En este última linea ocurre el problema. Cuando yo especifico un cliente en el combo funciona correctamente, el valor asignado a la propiedad ClienteID es el correcto.

    Por ejemplo: si combobox.selectedvalue = 1 entonces en la lista subyacente doc.clienteID = 1

    Por ejemplo: si combobox.selectedvalue = 2 entonces en la lista subyacente doc.clienteID = 2

    Pero el problema ocurre cuando yo no quiero seleccionar ningún valor para el cliente y en el combobox no elijo nada , o borro lo que haya en la casilla de texto. Sucede lo siguiente:

    Por ejemplo: si combobox.selectedvalue = Nothing  entonces en la lista subyacente doc.clienteID = 2

    Sigue conservando el valor viejo, y no funciona cuando a la propiedad SelectedValue se le asigna el valor Nothing.

    Entonces finalmente al grabar objectcontext.SaveChanges() el valor que uno cambió y supuestamente dejó nulo vuelve a aparecer el valor viejo, puesto que la propiedad subyacente núnca lo cambio del DataBinding.

    Lo mismo no sucede asignando la propiedad de navegación completa cliente as entity a la propiedad SelectedItem. De esta manera funciona bien. Pero de la otra forma debería funcionar correctamente con selectedValue y la propiedad string.

    Gracias por su respuesta.

     

     

     

    lunes, 30 de agosto de 2010 20:24

Respuestas

Todas las respuestas


  • o borro lo que haya en la casilla de texto

    el tema es que si estas saundo el combobox como editable no creo que aplique el evento SelectedValue porque cuando escribes en el combo el item no cambia

    si quieres permitir un combo con edicion opcional agrega un item con esta opcion al combo

    ComboBox - DropDownList – Opción “Todos”

    pero no hagas que el combo pueda borrarse

    recuerda ademas que los combos no impactan directo el cambio sobre la entidad que se uso para bindear los datos, deberias tomar ese valor Nothing que se devuelve y asignarlo a la entidad de EF, para luego si actualizar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 31 de agosto de 2010 3:22
  • Hola... Voy a volver a formular la cuestión..

    Tengo una entidad llamada 'Doc' que tiene una propiedad llamada ClienteID de tipo String. Yo enlazo la propiedad 'SelectedValue' de un combobox a ésta propiedad... Al combobox lo lleno con una colección de la entidad 'cliente'. El valuemember y displaymember los asigno correctamente... 

    Todo funciona perfecto, cuando elijo un cliente y verifico la entidad 'Doc' puedo ver que su propiedad 'ClienteID' tiene el valor esperado (el código del cliente elejido en el combo)....

    Luego borro el contenido del combo y verifico la propiedad 'SelectedValue' y su valor es 'null', hasta ahí perfecto, luego verifico la propiedad 'SelectedItem' e igualmente es 'null'.  El problema es que la propiedad 'ClienteID' de la entidad 'Doc' también debería ser 'null', pero no es así... ésta propiedad queda establecida con el código del último cliente que se eligió en el combo... 

    En otras palabras el enlace funciona correctamente cuando elijo algún ítem del combo, pero cuando el combo queda con un null, el enlace no actualiza ese null en el origen de datos, es decir, no establece la propiedad 'ClienteID' en null. éste es el detalle.. En otras palabra cuando es null, no funciona el enlace, si la propiedad SelectedValue tiene algún valor, por ejemplo '001', si funciona y la propiedad 'ClienteID' toma dicho valor, pero si la propiedad SelctedValue queda con null, entonces la propiead 'ClienteID' no queda con null como debería ser, sino que queda con '001' o la última asignación diferente de null...

    martes, 31 de agosto de 2010 15:18
  • hola

    claro porque en ningun momento esta enlazado el SelectedValue o SelectedItem con la propiedad ClienteID de "Doc"

    para quee sto funcione debes asignar el valor

    if(combo1.SelectedValue == null){

        Doc.ClientID = null;

    }

    en este caso si es nulo el valor del combo asigans nulo a la entidad

    pero esta relacion debes hacer tu mismo, no es automatica

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 31 de agosto de 2010 17:23
  • Hola, 

    La solución que dimos es escribiendo manualmente la propiedad de enlace del control:   Binding.write()


    Estyfen
    • Marcado como respuesta Estyfen Alzate domingo, 17 de octubre de 2010 2:32
    domingo, 17 de octubre de 2010 2:31