2011-02-05 2 views
3

dataGridView1 Я хочу подключиться к моему универсальному списку. Для этого я использую следующий код.dataGridView1 подключиться к моему универсальному списку?

dataGridView1.DataSource = List;

(Список статична)

Но каждый раз, когда я хочу, чтобы обновить список родовое dataGridView1 также получить обновление Что я должен делать?

+1

Я пытаюсь понять вас, но ваш вопрос не совсем в правильном английском языке. Если вы не хотите, чтобы ваш GridView обновлялся при обновлении данных в вашем списке, не используйте свой список для привязки данных к GridView и для вашего обновления (где бы это ни происходило). – TheGeekYouNeed

+0

Сделай это правильно? dataGridView1.DataSource = null; dataGridView1.DataSource = _List; –

+0

пример добавлен –

ответ

2

Использовать вместо BindingList<T>; это обеспечивает уведомления об изменении крышки (добавление, удаление и т. д.). Он также предоставляет уведомления на уровне строк (для изменений свойств), но только если ваш тип правильно реализует INotifyPropertyChanged; поэтому реализуйте это.

Re, ваш «список статический», если вы имеете в виду поле static, обратите внимание, что если вы находитесь. Используя несколько потоков, вы можете столкнуться с этой проблемой; Я бы так не сделал, лично, но это не связано с вопросом.

Пример:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

static class Program 
{ 
    class Foo 
    { 
     public int A { get; set; } 
     public string B { get; set; } 
    } 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     using (var form = new Form()) 
     using (var grid = new DataGridView { Dock = DockStyle.Fill }) 
     using (var add = new Button { Dock = DockStyle.Bottom, Text = "add" }) 
     using (var remove = new Button { Dock = DockStyle.Top, Text = "remove" }) 
     { 
      form.Controls.Add(grid); 
      form.Controls.Add(add); 
      form.Controls.Add(remove); 
      var lst = new BindingList<Foo>(); 
      var rnd = new Random(); 
      add.Click += delegate 
      { 
       lst.Add(new Foo { A = rnd.Next(1, 6), B = "new" }); 
      }; 
      remove.Click += delegate 
      { 
       int index = 0; 
       foreach (var row in lst) 
       { // just to illustrate removing a row by predicate 
        if (row.A == 2) { lst.RemoveAt(index); break; } 
        index++; 
       } 
      }; 
      grid.DataSource = lst; 
      Application.Run(form); 
     } 
    } 
} 
+0

статический список lst = новый список (); dataGridView1.DataSource = lst; lst.add ("АА", "ВВ", "СС"); lst.add ("AAA", "BBB", "CCC"); dataGridView1 также применяют изменения ... Как? –

+0

@ mah_85 'static BindingList lst = new BindingList ();' –

+0

Но обратите внимание, что я по-прежнему не соглашаюсь с 'static' здесь. Обратите внимание, что для отдельных изменений свойств в отдельных строках вам все равно нужно реализовать 'INotifyPropertyChanged' –

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