带数据绑定的DataGridView - 未显示新行

时间:2015-08-24 11:20:39

标签: c# .net winforms datagridview

我有一个DataGridView绑定到Class1的列表,就像my previous question一样(顺便说一下 - 的答案是使用属性而不是字段)。然后我用以下代码添加一行:

l.Add(new Class1 { a = 5, b = 6 });

我检查了行 已添加到列表中。但是DataGridView没有更新。这是怎么回事?

4 个答案:

答案 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(); 
相关问题