我将dataTable设置为datagridview的数据源。我在一个新线程上执行此操作(我不希望在加载数据时我的UI被阻止)。 我的困境是:线程完成后滚动条不起作用。我在加载数据之前尝试设置Scrollbars.None,之后尝试设置Scrollbars.Both。还尝试使用Refresh。但只是帮助我显示滚动条,这些仍然没有工作。
如果我在我的主体中使用相同的代码,那么它就可以完美地运行。
那我怎么做才能让它发挥作用?
我的代码:
postcodes = {
'123abc': {'postcode': '123abc', 'street': 'some street name', 'town': 'a town', 'city': 'a city'},
...
}
答案 0 :(得分:4)
好的,我终于明白了。我在我的线程中使用了MethodInvoker。它允许我在UI线程上运行并更新控件:
private void LoadData()
{
CheckForIllegalCrossThreadCalls = false;
this.dgv.Columns.Clear();
this.dgv.DataSource = MyDataTable;
this.Invoke((MethodInvoker)delegate
{
dgv.ScrollBars = ScrollBars.Both; // runs on UI thread
});
}
答案 1 :(得分:0)
我认为DataGridView的UI和数据源绑定不在同一个线程中。因此它的UI无法识别数据源已绑定。 你能尝试一下:通过将ScrollBars设置为Both来实现DataBindingComplete的委托吗?
例如:
private void dataGridView_DataBindingComplete(object sender,
DataGridViewBindingCompleteEventArgs e)
{
this.dgv.ScrollBars = ScrollBars.Both;
}
答案 2 :(得分:0)
您需要在UI线程中执行UI操作才能生效。
//UI Thread
this.Invoke((MethodInvoker)delegate
{
//DataGridview Refreshment
dataGridView.Enabled = true;
dataGridView.ScrollBars = ScrollBars.Both;
});