none
Como establecer la propiedad en un valuemember sin utilizando el nombre de la propiedad RRS feed

  • Pregunta

  • Hola, lo que necesito es obtener el nombre de la propiedad en lugar de establecerlo como una cadena entre comillas.

    En vez de hacer esto:
    Me.MiListBox.DataSource = Me.MiListaTipada
    Me.MiListBox.ValueMember =
    "IdTerminal"       'Nombre de la propiedad enlazada a esta columna
    Me.MiListBox.DisplayMember = "Nombre"         'Titulo que se mostrara para esta columna

    Me.MiListBox.DataSource = Me.MiListaTipada
    Me.MiListBox.ValueMember = MiClase.NombreDeMiPropiedad 'OJO nombre, no valor¡¡
    Me.MiListBox.DisplayMember = "Nombre" 'Titulo que se mostrara para esta columna

    El problema es que no se como obtener el nombre de la propiedad del objeto enlazado.
    Muchas gracias de antemano.
    viernes, 27 de marzo de 2009 12:30

Todas las respuestas

  • A ver mira, eso no es dinamico.

    Porque ponte que cambie el nombre de la propiedad MiNombreDeMiProp05, entonces tienes que ir al codigo, y cambiar tambien porque el ese nombre ya no existe. Entonces igual mejor ponerlo en duro.

    Lo que puedes hacer es definir una clase estatica, donde esten tus constantes y almanceas los nombres para los combos. Y si quieres que sea mas configurable lo pones en el archivo de configuracion, en el elmento appSEttings.

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Propuesto como respuesta sergio.tarrillo viernes, 27 de marzo de 2009 17:31
    viernes, 27 de marzo de 2009 17:30
  • Creo que no me estoy explicando bien.
    Yo puedo obtener la lista de las propiedades de un objeto y sacarlas como un string.
    No tengo que hacer nada con reflection, ni una clase que mapee esas propiedades.
    Fijate que lo que quiero es, pasar al valuemember el nombre de la propiedad. Cuando hablamos en el otro hilo te decia que era por un tema de ofuscación.
    Voy a tratar de explicarme mejor:
    Si yo establezco el nombre de la propiedad de esta manera "NombrePropiedad", el ofuscador no puede modificarla, porque para el no es una propiedad.
    Pero si puedo establecer el valuemember de la manera que te digo arriba, si podria hacerlo, porque si lo reconoce como una propiedad.
    Se que quieres ayudarme, pero no es una duda a nivel de diseño, es solo una duda sobre como obtener el nombre de una propiedad y no su valor cuando la enlazo con databind.
    De hecho, si podria hacerlo. Solo tendria que añadir las columnas sin utilizar el databind. Pero no me parece una manera estética de hacerlo.
    Gracias de todas formas
    viernes, 27 de marzo de 2009 21:13
  • Con el siguiente codigo obtengo el nombre de una propiedad:

     static void Main(string[] args)  
          {  
     
             cProducto objProd = new cProducto();           
             Type t = objProd.GetType();  
             PropertyInfo[] info = t.GetProperties();  
     
             Console.WriteLine("Nombre de la propiedad: {0}", info[0].Name);  
             Console.ReadLine();  
          }       


    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    viernes, 27 de marzo de 2009 21:46
  • sip, ya conocia esto. Pero fijate que el problema de hacerlo asi, es que eso te devuelve un listado de todas las propiedades.
    Y no el nombre de una propiedad en concreto.

    No es una solucion sencilla verdad?
    jejeje
    viernes, 27 de marzo de 2009 22:46
  • Lo que tendrias que verificar, es si siempre son el mismo orden. Si pasa eso, entonces los llamas con su valor fijo.

    Por ejemplo tu quieres el nombre de la 3 y 5 propiedad: info[2].Name, y info[4].Name.

    P.D.: Y si me dices que al numero tambien lo ofusca, cerramos el foro y nos vamos, a pasar un buen fin de semana :D.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    viernes, 27 de marzo de 2009 22:57
  • No puedo hacer eso, si hago lo que me comentas, cuando cambia una de las clases VO tendre que ir por todo el código cambiando eso.

    Saludos
    martes, 31 de marzo de 2009 8:48