2009-07-09 11 views
7

Ho un IList<string> di ritorno da una funzione (come LST variabile) e ho impostato e poi ho.NET/C# Binding IList <string> ad un DataGridView

this.dataGridView1.DataSource = lst; 

DataGrid aggiunge una colonna Lunghezza etichettati e poi elenca il lunghezza di ogni stringa. Come faccio a elencare solo le stringhe?

+1

Il vostro IList contiene solo le stringhe? o contiene qualche altro tipo, ''? – Nate

+0

uh ... ha detto che è un IList ... – Clyde

risposta

13

È davvero necessario un elenco di oggetti che hanno una proprietà di stringa. Con .NET 3.5 si potrebbe barare:

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

creare Altrimenti una classe fittizia e copiare i dati manualmente ...

+0

Esattamente quello che stavo cercando, i tipi anonimi sono grandi per questo genere di cose. –

+0

Ma se si modificano i valori dell'elenco, DataGridView NON ascolterà ... – Pedro77

1

Questo perché DataGridViews mostrano proprietà dell'oggetto. In questo caso l'elenco ha solo una proprietà "Lunghezza", quindi può visualizzare solo "Lunghezza" (indipendentemente dal tipo di dati). È necessario creare una classe wrapper per ottenere ciò che si desidera (una classe "MyString" con una proprietà di "Testo", quindi avere una lista visualizzata nella griglia).

Spero che questo aiuti

Aggiunta Esempio di codice

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

    } 

'Nel modulo di esecuzione

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(); 

     } 
Problemi correlati