为了账号安全,请及时绑定邮箱和手机立即绑定

将List <T>绑定到WinForm中的DataGridView

将List <T>绑定到WinForm中的DataGridView

C#
小唯快跑啊 2019-09-20 14:46:20
我上课了class Person{      public string Name {get; set;}      public string Surname {get; set;}}和List<Person>我添加一些项目。这个清单绑定了我的DataGridView。List<Person> persons = new List<Person>();persons.Add(new Person(){Name="Joe", Surname="Black"});persons.Add(new Person(){Name="Misha", Surname="Kozlov"});myGrid.DataSource = persons;没有问题。myGrid显示两行,但是当我向persons列表中添加新项目时,myGrid不会显示新的更新列表。它只显示我之前添加的两行。那么问题是什么?每次重新绑定都很有效。但是当我DataTable每次进行一些更改时都绑定到网格时,DataTable没有任何ReBind需要myGrid。如何在不重新绑定的情况下解决它?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

列表未实现,IBindingList因此网格不知道您的新项目。


将DataGridView绑定到一个BindingList<T>。


var list = new BindingList<Person>(persons);

myGrid.DataSource = list;

但我甚至会进一步将你的网格绑定到一个 BindingSource


var list = new List<Person>()

{

    new Person { Name = "Joe", },

    new Person { Name = "Misha", },

};

var bindingList = new BindingList<Person>(list);

var source = new BindingSource(bindingList, null);

grid.DataSource = source;


查看完整回答
反对 回复 2019-09-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

每次向List添加新元素时,都需要重新绑定Grid。就像是:


List<Person> persons = new List<Person>();

persons.Add(new Person() { Name = "Joe", Surname = "Black" });

persons.Add(new Person() { Name = "Misha", Surname = "Kozlov" });

dataGridView1.DataSource = persons;


// added a new item

persons.Add(new Person() { Name = "John", Surname = "Doe" });

// bind to the updated source

dataGridView1.DataSource = persons;


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 1465 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信