martes, enero 11, 2011

Llenar un DataGridView sin usar Dataset (Populate a DataGridView without a DataSet)

Podemos llenar un DataGridView asignando a su DataSource una lista de objetos tal como se muestra en el ejemplo 1.


Nota: Los objetos deben exponer sus propiedades mediante construcciones get/set. Aquellas propiedades que no se expongan así, no se mostrarán en el DataGridView aunque sean públicas.


Una forma alternativa sería crear una clase que derive de IListSource (por ejemplo) e implementar el método GetList(), tal como se muestra en el ejemplo 2. Podemos crear un método Add(). En este caso el argumento estará tipado, cosa que en el anterior aceptaba cualquier tipo derivado de Object.


El interface IBindingList aportará funcionalidad extra con el DataGridView.


Un link con un ejemplo muy completo: http://msdn.microsoft.com/en-us/library/ms404297.aspx


Ejemplo 1:


Form_Load()

{

IList myBusinessObjectsList = new List();
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 1", "Perfil A", "1..5"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 1", "Perfil B", "1..6"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 2", "Perfil A", "1..5"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 2", "Perfil C", "1..7"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 3", "Perfil D", "1..8"));

this.dataGridView1.DataSource = myBusinessObjectsList;

}


public class MyBusinessObject
{

private string _group;
private string _perfil;
private string _range;
public string Group
{
get { return _group; }
set { _group = value; }
}
public string Perfil
{
get { return _perfil; }
set { _perfil = value; }
}
public string Range
{
get { return _range; }
set { _range = value; }
}
public MyBusinessObject(string group, string perfil, string range)
{
Group = group;
Perfil = perfil;
Range = range;
}
}


Ejemplo 2:


private void Form_Load(object sender, EventArgs e)
{
MyBusinessObjectsList myBusinessObjectsList = new MyBusinessObjectsList();
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 1", "Perfil A", "1..5"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 1", "Perfil B", "1..6"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 2", "Perfil A", "1..5"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 2", "Perfil C", "1..7"));
myBusinessObjectsList.Add(new MyBusinessObject("Grupo 3", "Perfil D", "1..8"));
this.dataGridView1.DataSource = myBusinessObjectsList;
}


public class MyBusinessObjectsList: IListSource
{
List ls = new List();

#region IListSource Members
bool IListSource.ContainsListCollection
{
get { return false; }
}
System.Collections.IList IListSource.GetList()
{
return ls;
}
#endregion

public void Add(MyBusinessObject businessObject)
{
ls.Add(businessObject);
}
}

No hay comentarios:

Publicar un comentario