none
ObjectDataSource y BindingNavigator RRS feed

  • Pregunta

  • Hola foro,

    Voy a hacer una pregunta que posiblemente sea de nivel básico, pero no consigo pistas en internet sobre cómo solucionar este problema:

    Tengo una clase que quiero usar como ObjectDataSource:

        class Class1
        {
            public string Property1
            {
                get;
                protected internal set;
            }
    
            public string Property2
            {
                get;
                protected internal set;
            }
        }
    

    Tengo un formulario que contiene un BindingSource y un BindingNavigator:

    Mediante el editor del IDE, establecí la propiedad BindingSource del BindingNavigator al bindingSource1 y he creado un Binding para la propiedad Text del texbox para que esté asociada a la Propiedad1 de mi Clase1.

    En el código de la clase Form1 (el formulario) he agregado un miembro protegido que es un List<Class1> y en el evento Load del formulario inicializo esa lista:

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            List<Class1> myList;
    
            private void Form1_Load(object sender, EventArgs e)
            {
                myList = new List<Class1>();
                myList.Add(new Class1 { Property1 = "Object1", Property2 = "Object 1 property" });
                myList.Add(new Class1 { Property1 = "Object2", Property2 = "Object 2 property" });
                bindingSource1.DataSource = myList;
    
            }
        }
    

     

    Cuando ejecuto, el formulario muestra correctamente los valores de los objetos en la lista, pero si trato de modificar los valores, los datos de los objetos no se actualizan.

    Yo supondría que al estar asociado el texbox a la propiedad, la actualización del objeto subyacente sería automática, pero no está ocurriendo eso. ¿Qué estoy haciendo mal? ¿Qué estoy omitiendo?

    Muchísimas gracias de antemano :)

    martes, 29 de noviembre de 2011 13:08

Respuestas

  • No pueden actualizarse porque los set de las propiedades no son públicos.  Justamente eso se hace cuando queremos que los valores sean de sólo lectura.  ¿Cuál fue su razón para no hacerlos públicos?
    Jose R. MCP
    • Marcado como respuesta Yván Ecarri miércoles, 30 de noviembre de 2011 8:09
    martes, 29 de noviembre de 2011 14:52
    Moderador

Todas las respuestas

  • No pueden actualizarse porque los set de las propiedades no son públicos.  Justamente eso se hace cuando queremos que los valores sean de sólo lectura.  ¿Cuál fue su razón para no hacerlos públicos?
    Jose R. MCP
    • Marcado como respuesta Yván Ecarri miércoles, 30 de noviembre de 2011 8:09
    martes, 29 de noviembre de 2011 14:52
    Moderador
  • Exactamente eso era, José. ¡Muchas gracias!

    La razón por la cual pretendía mantener los setters protected internal es que nos gustaba la idea de que el usuario de la clase pudiera observar sus miembros, pero que la manipulación se hiciera únicamente a través de los mecanismos provistos por la propia clase. Clase1 tendría un método ShowUI que desplegaría el formulario para permitir su actualización.

    En realidad estoy omitiendo otros detalles de la implementación que no son relevantes, pero creo que la idea está ahí ;-)

    Te agradezco enormemente la información. Por lo pronto, cambiamos los setters a public y ya funciona de maravilla.

    miércoles, 30 de noviembre de 2011 8:15