Parece que estoy corriendo en círculos y lo he estado haciendo en las últimas horas.Cómo enlazar la lista a dataGridView?
Quiero rellenar una vista de cuadrícula de datos a partir de una matriz de cadenas. He leído que no es posible directamente, y que necesito crear un tipo personalizado que mantenga la cadena como una propiedad pública. Así que hice una clase:
public class FileName
{
private string _value;
public FileName(string pValue)
{
_value = pValue;
}
public string Value
{
get
{
return _value;
}
set { _value = value; }
}
}
esta es la clase de contenedor, y simplemente tiene una propiedad con el valor de la cadena. Todo lo que quiero ahora es que la cadena aparezca en la vista de cuadrícula de datos, cuando vinculo su fuente de datos a una lista.
También tengo este método, BindGrid() con el que quiero rellenar la cuadrícula de datos. Aquí está:
private void BindGrid()
{
gvFilesOnServer.AutoGenerateColumns = false;
//create the column programatically
DataGridViewTextBoxColumn colFileName = new DataGridViewTextBoxColumn();
DataGridViewCell cell = new DataGridViewTextBoxCell();
colFileName.CellTemplate = cell; colFileName.Name = "Value";
colFileName.HeaderText = "File Name";
colFileName.ValueType = typeof(FileName);
//add the column to the datagridview
gvFilesOnServer.Columns.Add(colFileName);
//fill the string array
string[] filelist = GetFileListOnWebServer();
//try making a List<FileName> from that array
List<FileName> filenamesList = new List<FileName>(filelist.Length);
for (int i = 0; i < filelist.Length; i++)
{
filenamesList.Add(new FileName(filelist[i].ToString()));
}
//try making a bindingsource
BindingSource bs = new BindingSource();
bs.DataSource = typeof(FileName);
foreach (FileName fn in filenamesList)
{
bs.Add(fn);
}
gvFilesOnServer.DataSource = bs;
}
Por último, el problema: la matriz de cadenas se llena bien, la lista se crea bien, pero me sale una columna vacía en el DataGridView. También probé datasource = list <> directamente, en lugar de = bindingsource, todavía nada.
Realmente agradecería un consejo, esto me ha estado volviendo loco.
Gracias
Una cosa a tener en cuenta, solo los campos públicos en su objeto que son propiedades se mostrarán en la cuadrícula.En otras palabras, necesitan tener {get; conjunto; } definido o se ignorarán. – Shane