2009-07-09 11 views
7

Ich habe eine IList<string> aus einer Funktion (als Variable LST) zurückkehren und I eingestellt und dann.NET/C# Binding IList <string> zu einem Datagridview

I
this.dataGridView1.DataSource = lst; 

Die Datenraster fügt eine Spalte mit der Bezeichnung Länge und listet dann die Länge jeder Saite. Wie mache ich es nur die Strings auflisten?

+1

Hat Ihr IList nur Strings enthalten? oder enthält es einen anderen Typ, '' '? – Nate

+0

uh ... er sagte, es ist ein IList ... – Clyde

Antwort

13

Sie benötigen wirklich eine Liste von Objekten, die eine Zeichenfolge-Eigenschaft haben. Mit .NET 3.5 können Sie betrügen:

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

Ansonsten eine Dummy-Klasse erstellen und kopieren Sie die Daten manuell ...

+0

Genau das, was ich suchte, sind anonyme Typen für diese Art von Sache groß. –

+0

Aber wenn Sie die Listenwerte ändern, wird die DataGridView NICHT zurückdupdate ... – Pedro77

1

Dies liegt daran, DataGridViews Eigenschaften des Objekts zeigen. In diesem Fall hat die Liste nur eine Eigenschaft "Länge", daher kann sie nur "Länge" anzeigen (unabhängig von DataType). Sie müssen eine Wrapper-Klasse erstellen, um das zu erreichen, was Sie wollen (eine "MyString" -Klasse mit einer Eigenschaft von "Text", dann wird eine Liste in Ihrem Raster angezeigt).

Hoffnung hilft diese

Codebeispiel Hinzufügen

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

    } 

‚In der Ausführung Form

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

     } 
Verwandte Themen