DataGridView - 添加到DataSource不会反映控件中的更改

时间:2009-09-14 14:50:57

标签: c# datagridview datasource

我有一个DataGridView,其DataSource设置为List。当我添加到该列表时,DataGridView不会获取更改。初始化的确切代码是:

dataGridView1.DataSource = document.m_statement.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST.STMTTRN;
dataGridView1.AllowUserToAddRows = true;
dataGridView1.AllowUserToDeleteRows = true;
dataGridView1.AllowUserToOrderColumns = true;
dataGridView1.AllowUserToResizeColumns = true;
dataGridView1.AllowUserToResizeRows = false;

更新数据源的确切代码是:

SimpleOfx.OFXBANKMSGSRSV1STMTTRNRSSTMTRSBANKTRANLISTSTMTTRN transaction = new SimpleOfx.OFXBANKMSGSRSV1STMTTRNRSSTMTRSBANKTRANLISTSTMTTRN();
document.m_statement.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST.STMTTRN.Add(transaction);

正如您可能知道的,类名是使用xsd.exe生成的,SimpleOfx是生成的类的名称空间,STMTTRN是列表,document是包含反序列化XML文件的类的实例,以及m_statement是那个档案。

知道我需要做些什么才能让控件反映在设置后对DataSource所做的更改?我已经尝试过再次设置它,但这不起作用。我试过'刷新'和各种其他听起来很有希望的方法,但它们也没有用。在此先感谢:)

编辑:更多信息;我可以闯入代码并查看我的'document'成员和dataGridView1的'DataSource'属性;它们都具有正确数量的元素,包括一些默认构造的元素,但控件仍然不会绘制这些额外的行。 DataGridView的DataSource似乎确实知道列表的新内容,但没有绘制它们。

2 个答案:

答案 0 :(得分:4)

我通过将STMTTRN从List更改为BindingList来解决这个问题 - 当用作DataSource时,List似乎有一些非常奇怪的行为(请参阅我最近的另一个问题,它以相同的方式解决)。

它是在生成的代码中,但我已经将它从一个数组更改为一个List,所以BindingList几乎没有任何额外的麻烦:)

答案 1 :(得分:1)

添加到数据源列表后,您必须重新绑定,所以重做:

dataGridView1.DataSource = document.m_statement.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST.STMTTRN;