también puede usar linq y tipos anónimos para lograr el mismo resultado con mucho menos código como se describe aquí .
ACTUALIZACIÓN: el blog no funciona, aquí está el contenido:
(..) Los valores que se muestran en la tabla representan la longitud de las cadenas en lugar de los valores de la cadena (!) Puede parecer extraño, pero así es como funciona el mecanismo de enlace de forma predeterminada: dado un objeto, intentará enlazar con la primera propiedad de ese objeto (la primera propiedad que puede encontrar). Cuando se pasa una instancia, la clase String, la propiedad a la que se une es String.Length, ya que no hay otra propiedad que proporcione la cadena real.
Eso significa que para que nuestro enlace sea correcto, necesitamos un objeto contenedor que expondrá el valor real de una cadena como una propiedad:
public class StringWrapper
{
string stringValue;
public string StringValue { get { return stringValue; } set { stringValue = value; } }
public StringWrapper(string s)
{
StringValue = s;
}
}
List<StringWrapper> testData = new List<StringWrapper>();
Table1.SetDataBinding(testdata);
Si bien esta solución funciona como se esperaba, requiere bastantes líneas de código (principalmente para convertir la lista de cadenas a la lista de envoltorios de cadenas).
Podemos mejorar esta solución usando LINQ y tipos anónimos; usaremos la consulta LINQ para crear una nueva lista de envoltorios de cadenas (el envoltorio de cadenas será un tipo anónimo en nuestro caso).
var values = from data in testData select new { Value = data };
Table1.SetDataBinding(values.ToList());
El último cambio que vamos a hacer es mover el código LINQ a un método de extensión:
public static class StringExtensions
{
public static IEnumerable CreateStringWrapperForBinding(this IEnumerable<string> strings)
{
var values = from data in strings
select new { Value = data };
return values.ToList();
}
De esta manera podemos reutilizar el código llamando a un método único en cualquier colección de cadenas:
Table1.SetDataBinding(testData.CreateStringWrapperForBinding());
DataPropertyName
de la columna debe serValue