2009-07-09 3 views
7

У меня есть IList<string> возвращающегося из функции (как переменная LST) и я установил, а затем я.NET/C# Binding IList <string> к DataGridView

this.dataGridView1.DataSource = lst; 

сетке данных добавляет один столбец с надписью Длина и затем перечисляет длина каждой строки. Как это сделать, просто перечислите строки?

+1

Содержит ли ваш IList только строки? или он содержит какой-то другой тип, ''? – Nate

+0

Ух ... он сказал, что это IList ... – Clyde

ответ

13

Вам действительно нужен список объектов, которые имеют свойство string. С .NET 3.5 вы можете обмануть:

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

В противном случае создать фиктивный класс и скопировать данные вручную ...

+0

Точно то, что я искал, анонимные типы отлично подходят для такого рода вещей. –

+0

Но если вы измените значения в списке, DataGridView НЕ ударит ... – Pedro77

1

Это потому, что DataGridViews показать свойство объекта. В этом случае List имеет только одно свойство «Длина», поэтому он может отображать только «Lenght» (независимо от типа DataType). Вам нужно создать класс-оболочку для достижения желаемого (класс «MyString» с свойством «Текст», а затем отобразить список в вашей сетке).

Надеется, что это помогает

Добавление кода Примера

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

    } 

«В исполняющей форме

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

     } 

 Смежные вопросы

  • Нет связанных вопросов^_^