example español databindings databinding databind data winforms data-binding

español - WinForms+DataGridView vinculante a una lista<T>



databindings c# textbox (4)

¿La propiedad en la grilla también está vinculando a Opcode? ... si quiere vincularse directamente con List, simplemente DataSource = list. Los enlaces de datos permiten un enlace personalizado. ¿Estás tratando de hacer algo más que el origen de datos?

¿Estás recibiendo un montón de filas vacías? ¿las columnas generadas automáticamente tienen nombres? ¿Has verificado que los datos están en el objeto (no solo en string.empty)?

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 ...

Estoy intentando vincular una List<T> a un control DataGridView, y no estoy teniendo suerte creando enlaces personalizados.

Yo he tratado:

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

Lanza una excepción, diciendo que no se encontró nada por ese nombre de propiedad.

El nombre de la columna en cuestión es "Opcode". El nombre de la propiedad en la List<T> es Opcode.

EDITAR RESPUESTA : el problema era que no tenía los campos enlazables en mi clase como propiedades, solo campos públicos ... Aparentemente no se refleja en campos, solo propiedades.


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

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 bien para mí,


Realmente no puedo decir lo que estás tratando de hacer con el ejemplo que incluiste, pero el enlace a una lista genérica de objetos es bastante sencillo si solo quieres enumerar 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 solo desea mostrar propiedades específicas del tipo de la Lista, debería poder hacer invisibles las columnas no deseadas.

Técnicamente, realmente no necesitas crear BindingSource, pero creo que es mucho más fácil cuando realizo actualizaciones o cambios si lo tengo.

Espero que esto ayude.


Tenía el mismo problema ... Obviamente tenía una estructura con campos públicos. nada en la grilla proporcionado getters públicos, funcionó.