dataGridView1我想连接到我的通用列表。为此,我使用下面的代码。
dataGridView1.DataSource = List;
(列表是静态的)
但是每次我想更新列表时,通用dataGridView1也会得到更新 我该怎么办?
答案 0 :(得分:2)
改用BindingList<T>
;这提供了盖子更改通知(添加,删除等)。它还提供行级通知(用于属性更改),但前提是您的类型正确实现INotifyPropertyChanged
;所以实现它。
如果您指的是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);
}
}
}