100

クラスがあります

class Person{
      public string Name {get; set;}
      public string Surname {get; set;}
}

List<Person>いくつかの項目を追加します。リストは my にバインドされてい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;

問題はない。2行が表示されますが、リストにmyGrid新しいアイテムを追加しても、新しく更新されたリストは表示されません。以前に追加した 2 つの行のみが表示されます。personsmyGrid

それで、問題は何ですか?

毎回再バインドするとうまくいきます。しかしDataTable、グリッドに a をバインドすると、変更を加えるたびDataTableに ReBind する必要がなくなりmyGridます。

毎回再バインドせずに解決する方法は?

4

5 に答える 5

207

List は実装されていない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;
于 2013-05-22T15:36:38.410 に答える
4

リストに新しい要素を追加するたびに、グリッドを再バインドする必要があります。何かのようなもの:

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;
于 2013-05-22T15:34:18.877 に答える
0

追加する新しいアイテムをpersons追加した後:

myGrid.DataSource = null;
myGrid.DataSource = persons;
于 2013-05-22T15:36:26.280 に答える