0

我有一个数据表(作业),该表中有一个名为 StatusId 的列。我有另一个数据表(jobStatus)。作业表有 1 条作业记录,作业状态表包含所有作业状态。

在我的 winforms 表单上,我显示了作业记录,作业状态是一个显示作业状态表内容的组合框。列表部分 (DisplayMember) 绑定到 jobstatus 表,数据部分绑定到作业表。(ValueMember)所以一切都很好,当我的工作被选中并显示时,组合框会选择相应的工作状态......一切都很好。

现在我有另一个表单(JobStatus),我可以在其中添加更多的工作状态记录。因此,当我输入/更改工作记录时,我发现我需要另一个工作状态,所以我跳到我的工作状态表并输入我的新状态。然后我跳回到工作表,现在我希望能够在组合框中选择我的新工作状态。

我的问题是这个场景的最佳实践是什么,其中新记录已添加或编辑到用于在另一个表单上填充组合框的查找样式列表中。我尝试将代码放在表单的激活事件中,除了表单闪烁之外,它看起来很丑陋。

有任何想法吗???

我实际上是在按照您所说的进行操作,这让我更仔细地查看了代码。问题是我处理代码行的顺序,我发现当

旧代码

  cboCustomer.DataSource = Business.Contact.GetContact( Enums.ContactType.Customer ).Tables[0];
            sorted = ( ( DataTable ) cboCustomer.DataSource ).DefaultView;
            sorted.Sort = "Name ASC";

新代码在这里

  DataView dv = Business.Contact.GetContact( Enums.ContactType.Customer ).Tables[0].DefaultView;
            dv.Sort = "Name ASC";
            DataTable dt = dv.ToTable();
            cboCustomer.DataSource = dt;

奇迹般有效。为你的帮助干杯

4

1 回答 1

1

您应该能够Activated毫无问题地使用该事件。这甚至是文档所说的有利于:

您可以将此事件用于诸如在未激活表单时根据对表单数据所做的更改来更新表单内容等任务。

当然,当您在父表单上订阅此事件时,您会得到一些误报。考虑用户切换到表单而不尝试使用组合框控件的情况。这不是什么大问题,但在这种情况下,您将无缘无故地更新组合框。这很容易通过切换到处理组合框控件的Enter事件来解决。仅当该特定控件获得焦点时才会引发此问题。该Enter事件的唯一限制是您不能从该事件处理程序内部更改焦点控件(但无论如何您都不想这样做)。

所以现在我们需要解决闪烁问题,我想你会发现它非常简单。在事件处理程序方法的开头(无论您使用哪个),在您开始更新组合框之前,调用它的BeginUpdate方法。这可以防止控件在更新时闪烁(通过抑制绘制)。最后,您需要调用 来完成EndUpdate,这将重新启用绘画并执行一次重新绘画以反映您的更改。

我只是自己测试了这个,我没有看到任何闪烁。在重新绘制控件以反映您的更改时,您将获得的最多只是一次闪烁。显然,你不能做得比这更好。

于 2013-03-17T08:09:37.347 回答