Estoy tratando de enlazar un List<T> a un control DataGridView, y no estoy teniendo suerte la creación personalizada de enlaces.

He intentado:

gvProgramCode.DataBindings.Add(new Binding("Opcode",code,"Opcode"));

Se lanza una excepción, diciendo que no se encontró nada por que el nombre de la propiedad.

El nombre de la columna en cuestión es el de «código de operación». El nombre de la propiedad en el List<T> es Opcode.

RESPUESTA EDITAR: el problema era que yo no tenía la enlazable campos en mi clase de propiedades, sólo campos públicos…al Parecer no reflejan en los campos, sólo propiedades.

  • LOL que es justo lo que yo había añadido en mis comentarios, me alegro de que usted consiguió su problema resuelto.
  • +1 yo he tenido el mismo problema. El hombre que chupa las bolas!!!
  • Eres un regalo del cielo. He estado golpeando mi cabeza contra este problema durante seis horas seguidas, ahora. Intentado todo lo que podía pensar, y todo lo que podía pensar a Google. No hubo suerte. Finalmente encontré tu post y, por supuesto, yo estaba en un apuro y les hizo campos, no las propiedades.
InformationsquelleAutor FlySwat | 2008-09-24

4 Comentarios

  1. 14

    Es la propiedad de la cuadrícula son vinculantes para el código de operación así?.. si desea enlazar directamente a la Lista que usted acaba de DataSource = lista. El databindings permite el enlace personalizado. estás tratando de hacer algo que no sea el origen de datos?

    Que usted está recibiendo un montón de filas vacías? hacer el auto generado por las columnas tienen nombres? ¿Has comprobado los datos en el objeto (no sólo de la cadena.vacío) ?

        class MyObject
        {
            public string Something { get; set; }
            public string Text { get; set; }
            public string Other { get; set; }
        }
    
        public Form1()
        {
            InitializeComponent();
    
            List<MyObject> myList = new List<MyObject>();
    
            for (int i = 0; i < 200; i++)
            {
                string num = i.ToString();
                myList.Add(new MyObject { Something = "Something " + num , Text = "Some Row " + num , Other = "Other " + num  });
            }
    
            dataGridView1.DataSource = myList;
        }

    esto debería funcionar bien…

    • Sí. Si acabo de hacer DataSource = lista, tengo un montón de columnas vacías.
    • Tan solo quieres enlazar la cuadrícula para el código de operación de la propiedad en una lista de objetos personalizados?
    • Si lo que te pedí es el yeso, a continuación, hacer… de la Cuadrícula.DataSource = Milista.Seleccione(o => o.Código de operación (Opcode);
    • Hay tres cadenas en clase, código de operación es uno de ellos. Esta clase es el tipo de una Lista de<T>, quiero que cada cadena a una columna, y cada elemento de la lista a ser una fila…
    • Otra cosa.. las cadenas en el objeto son las propiedades y no sólo los campos públicos de la derecha?.. si usted podría publicar la definición del objeto podría ayudar también.
  2. 5

    Realmente no puedo decir lo que estamos tratando de hacer con el ejemplo que se incluye, sin embargo, el enlace a una lista genérica de los objetos es bastante sencillo si sólo desea de la lista de los objetos:

        private BindingSource _gridSource;
    
        private BindingSource GridSource
        {
            get
            {
                if (_gridSource == null)
                    _gridSource = new BindingSource();
                return _gridSource;
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            List<FluffyBunny> list = new List<FluffyBunny>();
            list.Add(new FluffyBunny { Color = "White", EarType = "Long", Name = "Stan" });
            list.Add(new FluffyBunny { Color = "Brown", EarType = "Medium", Name = "Mike" });
            list.Add(new FluffyBunny { Color = "Mottled", EarType = "Short", Name = "Torvald" });
    
            GridSource.DataSource = list;
            dataGridView1.Columns["EarType"].Visible = false; //Optionally hide a column
            dataGridView1.DataSource = GridSource;
    
        }

    Si sólo desea ver las propiedades específicas de la Lista el tipo debe ser capaz de hacer que la columna no deseada(s) invisible.

    Técnicamente, usted realmente no necesita para crear el BindingSource, pero me parece que es mucho más fácil cuando estoy haciendo las actualizaciones o cambios si la tengo.

    Espero que esto ayude.

    • Cuando se enlaza directamente a la Lista de<T>, tengo un montón de filas vacías, no hay datos. La clase en la Lista de<T> solo contiene 3 cadenas.
    • Gracias Jared! Tu comentario acerca de la BindingSource realmente me ayudó cuando yo estaba tratando de averiguar cómo crear nuevas filas cuando se utiliza una Lista de<T>. Tienen un clic!
    • +1 para datos interesantes
  3. 4

    Tenido el mismo problema… yo tenía una estructura con campos públicos, obviamente. nada en la red. siempre público captadores, trabajado.

    • Trabajó para mí! Tks
  4. 4

    Otra solución que he encontrado es usar el BindingList colección.

    
    
    private void Form1_Load(object sender, EventArgs e)
    {
       BindingList people= new BindingList {
        new Person {Name="John",Age=23},
        new Person {Name="Lucy",Age=16}
      };
    
       dataGridView1.DataSource= people;
    }

    Funciona muy bien para mí,

    • El uso de BindingList<T> ha salvado mi cuello, tratando de enlazar DataGridViews! Gracias.

Dejar respuesta

Please enter your comment!
Please enter your name here