dataGridView 不会反映更新的数据集

dataGridView won't reflect updated dataset

在我的主窗体上,我有以下方法:

private void updateSet()
{
    dsManager.fillPeriodSet();

    dataGridView1.DataSource = null;

    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = dsManager.mainSet;

    dataGridView1.DataMember = "nice_table";
}

此方法在表单初始化时从构造函数中调用,并在使用附加 "period" 更新数据集后再次调用。它完美地工作,第一次加载表单时,更改数据集的功能也可以正常工作,我可以确认新值已通过检查器成功添加 window.

第二次调用时,即使数据集已正确更新,也没有任何反应。如果我关闭表单并重新 运行,它将再次正确显示,包括新添加的 "period".

我知道这个论坛和其他论坛上还有很多其他类似的问题,我已经尝试了至少 10 个。似乎对其他人有用的东西在这里都不起作用。

过去有没有人遇到过这个问题?

当应用程序处于活动状态且有多个表单时,活动表单是具有输入焦点的表单。不可见的表单不能成为活动表单。激活可见表单的最简单方法是单击它或使用适当的键盘组合。

在 c# windowsApplication 中你有一个名为 Form_Activate

的事件

你可以处理这个事件和运行你的代码当这个事件发生时。

private void Form1_Activated(object sender, System.EventArgs e)
    {
        //your code :)
    }

因此,在尝试了大约一周左右的代码变体之后,我终于在做出以下更改时让一切正常工作:

dataGridView1.DataSource = itemSet1;
dataGridView1.DataMember = "items_formatted";

dataGridView1.DataSource = itemSet1.Tables["items_formatted"];
//dataGridView1.DataMember = "items_formatted";

显然,DataMember 属性发生了一些问题,导致 DataGridView 无法刷新。即使当我明确清除它 (dataGridView1.DataMember = null;) 并且它在 Locals window 中显示为已清除时,它仍然具有某种残留效果,导致无法重新加载数据集。

非常令人沮丧,如果有人知道这是为什么,我很想知道。否则我希望这个 question/answer 至少可以帮助处于相同位置的其他人。

更新:

作为额外参考,我原来问题中的代码更新自:

dataGridView1.DataSource = dsManager.mainSet;

dataGridView1.DataMember = "nice_table";

至:

dataGridView1.DataSource = dsManager.mainSet.Tables["nice_table"];

现在也可以了。我的任何表单都不需要额外的 clear/updating/restructuring 代码。