我有一个DataGridView
绑定到Class1
的列表,就像my previous question一样(顺便说一下 - 的答案是使用属性而不是字段)。然后我用以下代码添加一行:
l.Add(new Class1 { a = 5, b = 6 });
我检查了行 已添加到列表中。但是DataGridView
没有更新。这是怎么回事?
答案 0 :(得分:2)
如果在有限来源中进行了任何更改,或者在two way bounded中,您必须重新分配数据源:
grid.DataSource = null;
grid.DataSource = l;
答案 1 :(得分:1)
AllowUserToAddRows
的属性DataGridView
必须为true
。
DataSource
的{{1}}必须是DataGridView
。其属性BindingSource
必须为AllowNew
。
您可以在Designer中为DGV创建true
(此处称为BindingSource
),方法是编辑其属性personBindingSource
... {{1的DataSource
}}可能是DataSource
。
所以这很好...
BindingSource
新行将显示:-)
这不起作用...
List<Person>
DGV仍然包含所有元素,但是在这种情况下,新行将不会显示:-(
也许有帮助...
答案 2 :(得分:0)
你应该按照以下方式设置它。在列表中添加新项目后,必须将Datasource设置为null,并将其重新分配给dataGridview。
List<Person> lst = new List<Person>();
private void button5_Click(object sender, EventArgs e)
{
lst.Add(new Person("X"));
lst.Add(new Person("y"));
dataGridView2.DataSource = lst;
lst.Add(new Person("Z"));
dataGridView2.DataSource = null;
dataGridView2.DataSource = lst;
}
public class Person
{
public Person(string fname)
{
this.firstname = fname;
}
public string firstname { get; set; }
}
答案 3 :(得分:0)
您可以使用BindingSource,这里有Datatable的示例,当数据源中发生任何更改时,它将在没有任何刷新功能的情况下同时反映出来。如果要添加新行,只需更新数据表。
Thread thread1 = new Thread(builder.GenerateCsvFile);
thread1.Priority = System.Threading.ThreadPriority.Lowest;
thread1.Start();