2009-07-09 21 views
7

tengo una IList<string> regresar de una función (como lst variable) y I SET y luego.NET/C# Encuadernación IList <string> a un DataGridView

this.dataGridView1.DataSource = lst; 

La cuadrícula de datos añade una columna denominada longitud y, a continuación enumera la longitud de cada cuerda ¿Cómo puedo hacer que solo enumere las cadenas?

+1

contiene su IList sólo cadenas? o ¿contiene algún otro tipo, ''? – Nate

+0

uh ... dijo que es un IList ... – Clyde

Respuesta

13

Realmente necesita una lista de objetos que tienen una propiedad de cadena. Con .NET 3.5 se podía hacer trampa:

.DataSource = list.Select(x=>new {Value = x}).ToList(); 

De lo contrario crear una clase ficticia y copia los datos en forma manual ...

+0

Exactamente lo que estaba buscando, los tipos anónimos son geniales para este tipo de cosas. –

+0

Pero si cambia los valores de la lista, DataGridView NO se actualizará ... – Pedro77

1

Esto se debe a DataGridViews muestran propiedades del objeto. En este caso, la Lista solo tiene una propiedad "Longitud", por lo tanto, solo puede mostrar "Longitud" (independientemente de Tipo de Dato). Necesita crear una clase contenedora para lograr lo que desea (una clase "MiTadena" con una propiedad de "Texto", luego tener una Lista mostrada en su cuadrícula).

Esperanza esto ayuda

Adición Ejemplo Código

class MyString 
    { 
     private string _text; 
     public string Text 
     { get 
      { 
       return _text; 
      } 
      set 
      { 
       _text = value; 
      } 
     } 

    } 

'En la forma de ejecución

private List<MyString> foo() 
     { 
      List<MyString> lst = new List<MyString>(); 
      MyString one = new MyString(); 
      MyString two = new MyString(); 
      one.Text = "Hello"; 
      two.Text = "Goodbye"; 
      lst.Add(one); 
      lst.Add(two); 
      return lst; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      dataGridView1.DataSource = foo(); 

     } 
Cuestiones relacionadas