none
Como enlazar DataPropertyName del DataGridView a una Propiedad de una clase de Segundo Nivel RRS feed

  • Pregunta

  • Saludos, espero esten bien.

    Hay alguna forma de enlazar el DataPropertyName del Datagridview con una propiedad de segundo nivel???? Me explico tengo 2 clases

     

    public class Contact { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } }

    //Clase con propiedades de segundo nivel public class Address { public string Street { get; set; } public string City { get; set; }

    }


    //en el evento load del form

    privatevoid Form1_Load(object sender, EventArgs e) { dataGridView1.AutoGenerateColumns = False; dataGridView1.DataSource = Contactos();//metodo que utilizo para devolver los Contact

    //esto lo puedo hacer bien, ya que son propiedades de primer nivel

    DataGridViewTextBoxColumn columna = dataGridView1.Columns["Name"] as DataGridViewTextBoxColumn;
            columna.DataPropertyName = "Name";

    //Pero si quiero acceder a una propiedad de segundo nivel desde el DataPropertyName

    DataGridViewTextBoxColumn columna1 = dataGridView1.Columns["Street"] as DataGridViewTextBoxColumn;
            columna.DataPropertyName = ??????;//que o como se coloca aqui "Address.Street"(no funciona) y me aparece en la columna del DatagridView namespace.Address.

    }

    espero haber sido lo mas explicito posible...Agradezco la colaboracion, por ahi estuve revisando el siguiente enlace, pero si tiene o sugieren otra forma de hacerlo...vale (http://blogs.msdn.com/b/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx)

    jueves, 17 de mayo de 2012 5:12

Respuestas

  • puedes usar

    DataGridViewTextBoxColumn columna1 = dataGridView1.Columns["Street"] as DataGridViewTextBoxColumn;
    columna.DataPropertyName = Address;

    pero si haces

    public class Address {
    
       public string Street { get; set; }
       public string City { get; set; }
    
       public override string ToString(){
    
           return this.Street;
    
       }
    
    }

    de esta forma tomara el ToString() para mostrar en ese campo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Johan0920 jueves, 17 de mayo de 2012 14:54
    jueves, 17 de mayo de 2012 12:12

Todas las respuestas

  • puedes usar

    DataGridViewTextBoxColumn columna1 = dataGridView1.Columns["Street"] as DataGridViewTextBoxColumn;
    columna.DataPropertyName = Address;

    pero si haces

    public class Address {
    
       public string Street { get; set; }
       public string City { get; set; }
    
       public override string ToString(){
    
           return this.Street;
    
       }
    
    }

    de esta forma tomara el ToString() para mostrar en ese campo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Johan0920 jueves, 17 de mayo de 2012 14:54
    jueves, 17 de mayo de 2012 12:12
  • Gracias Leandro, como siempre tu aporte fue valioso, algo que hice para devolver las dos fue de esta foma

    public class Address {
    
       public string Street { get; set; }
       public string City { get; set; }
    
       public override string ToString(){
    
           return this.Street + " , " + this.City;
    
       }
    }

    claro en la columna del DataGridView me aparece con el formato (Street , City ) ej: "Calle Sancho , Cartagena de Indias" .

    Gracias

    jueves, 17 de mayo de 2012 14:59
  • Gracias Leandro, muy útil.

    Un saludo,
    Cristian Pérez
    Blog

    jueves, 14 de noviembre de 2013 19:39