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)
如果您在将 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)