Solución:
Utilice una BindingList y establezca la propiedad DataPropertyName-Property de la columna.
Intente lo siguiente:
...
private void BindGrid()
{
gvFilesOnServer.AutoGenerateColumns = false;
//create the column programatically
DataGridViewCell cell = new DataGridViewTextBoxCell();
DataGridViewTextBoxColumn colFileName = new DataGridViewTextBoxColumn()
{
CellTemplate = cell,
Name = "Value",
HeaderText = "File Name",
DataPropertyName = "Value" // Tell the column which property of FileName it should use
};
gvFilesOnServer.Columns.Add(colFileName);
var filelist = GetFileListOnWebServer().ToList();
var filenamesList = new BindingList<FileName>(filelist); // <-- BindingList
//Bind BindingList directly to the DataGrid, no need of BindingSource
gvFilesOnServer.DataSource = filenamesList
}
puede ser un poco tarde pero útil para el futuro. Si no necesita establecer propiedades personalizadas de la celda y solo le preocupa el texto del encabezado y el valor de la celda, este código lo ayudará
public class FileName
{
[DisplayName("File Name")]
public string FileName {get;set;}
[DisplayName("Value")]
public string Value {get;set;}
}
y luego puede vincular la lista como fuente de datos como
private void BindGrid()
{
var filelist = GetFileListOnWebServer().ToList();
gvFilesOnServer.DataSource = filelist.ToArray();
}
Para obtener más información, puede visitar esta página Vincular la lista de objetos de clase como fuente de datos a DataGridView
Espero que esto te ayudará.
Sé que esto es viejo, pero esto me colgó por un tiempo. Las propiedades del objeto en su lista deben ser “propiedades” reales, no solo miembros públicos.
public class FileName
{
public string ThisFieldWorks {get;set;}
public string ThisFieldDoesNot;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)