为什么datagridview不刷新?

l--*_*''' 5 .net c# data-binding datagridview winforms

这是我按下按钮后发生的事情:

    dataGridView1.DataSource = ConnectandReadList(some_query);
    dataGridView1.Refresh();
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用另一个名为的控件执行此操作,chart1并且它可以正常使用它,它使用新的重新获取的数据填充它,但datagridview它只是保持不变

第一次尝试是成功的.

然而,第二次按它,它显示相同的东西!

有谁知道我是否正确刷新datagridview?

Coo*_*ops 10

这里与@Fake的细微差别但是调用Refresh()不能仅在dataGridView上调用它

"强制控件使其客户区无效,并立即重绘自身和任何子控件."

由于该方法涉及任何控制,而不涉及刷新与对象有关的数据.请参阅此处(DataGridView方法)并向下滚动到"刷新",您将看到Control.Refresh方法的链接点

你想要这样的东西;

BindingSource bs = new BindingSource(); 
bs.DataSource = ConnectandReadList(some_query);
dataGridView1.DataSource = bs;
bs.ResetBindings(false)
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话ResetBindings()bs(你的BindingSource);

BindingSource bs = new BindingSource(); 
private refreshData()
{
    bs.ResetBindings(false)
}
Run Code Online (Sandbox Code Playgroud)

  • ResetBindings FTW.对于像这样的问题,有许多列出的建议,但这是我必须为数据绑定datagridview工作的唯一一个.这应该是答案,因为接受的答案链接到没有解决方案的论坛帖子...... (2认同)

Sub*_*nch 3

如果您在将 List<> 设置为数据源时绑定到 List<>,则可以做一些小技巧,在末尾添加 ToList() ,如下所示:

dataGridView1.DataSource = ConnectandReadList(some_query).ToList();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这会导致它刷新而不会丢失任何引用或任何东西。

另一种方法是直接通知 DataGridView 它的数据发生了变化,如下所示:

dataGridView1.DataSource = ConnectandReadList(some_query)
var m = dataGridView1.GetType().GetMethod("OnDataSourceChanged", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(dataGridView1, new object[] { EventArgs.Empty });
Run Code Online (Sandbox Code Playgroud)