【发布时间】:2017-11-29 06:34:21
【问题描述】:
我有 2 个表格。表格 1 和表格 2。 Form1从弹出的form2中获取日期间隔。
Form2 有搜索按钮。搜索按钮如下;
//form2
private void ubSAVE_Click(object sender, EventArgs e)
{
Form1 f1= new Form1();
f1.minDateCustomIO = Convert.ToDateTime(minDateString);
f1.maxDateCustomIO = Convert.ToDateTime(maxDateString);
f1.customIO = uosIO.CheckedIndex;
if (!f1.bgwCustomIO.IsBusy)
{
f1.bgwCustomIO.RunWorkerAsync(); // run bgw on form1
}
}
Form1 上的 bgw 将数据加载到数据表等。一切正常。只有一个除外;
然后我在该 bgw 上使用 RunWorkerCompleted 事件,如下所示;
//form1
public void bgwCustomIO_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
ultraGrid1.DataSource = dtCustomIOM; // Here is the problem.
MessageBox.Show(dtCustomIOM.Rows.Count.ToString());
}
MessageBox 验证我在该数据表中有行但是我不能分配给网格。
没有错误,没有。我也将它们的修饰符更改为 public。
只是它没有分配它。这背后的原因是什么,我该如何解决?
【问题讨论】:
-
您的方法看起来是正确的,但是您在哪里声明了 bgwCustomIO_RunWorkerCompleted 事件以及 dtCustomIOM 对象的确切类型。将数据表分配给 ultrawingrid 没有任何问题。见Ref
-
@NiranjanKala 我认为来自另一个表单/实例的调用存在问题。因为如果我这样做而不使用其他形式。它有效。
-
你有
Form1用于打开Form2然后在Form2中你有问题中的代码,我说得对吗? -
@Enigmativity 是的,Form1 打开 form2。而form2在form1上触发bgworker
-
@johntrue - 您在
Form2中的代码正在创建一个全新的Form1实例,因此您有两个Form1实例 - 您可能正在正确更新第二个Form1,但是第一个实例不变。