刷新组合框列表中的数据

时间:2013-03-17 06:08:09

标签: winforms data-binding

我有一个数据表(作业),在这个表中有一个名为StatusId的列。我有另一个数据表(jobStatus)。作业表有1个作业记录,jobstatus表具有所有作业状态。

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

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

我的问题是这个senario的最佳做法是将新记录添加或编辑到查找样式列表中,该列表用于在另一个表单上填充组合框。我已经尝试将代码放在表单的activate事件中,除了表单闪烁之外它看起来很丑。

任何想法???

我实际上正在做你说的话,这让我看起来更接近代码。问题是我处理代码行的顺序,我发现

旧代码

  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;

就像一个魅力。干杯为你提供帮助

1 个答案:

答案 0 :(得分:1)

您应该可以毫无问题地使用Activated事件。这甚至是the documentation所说的有利于:

  

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

当然,当您在父表单上订阅此事件时,您会得到一些误报。考虑用户切换到形式而不尝试使用组合框控件的情况。这不是什么大不了的事,但在这种情况下,你会毫无理由地更新组合框。通过切换到处理组合框控件的Enter event可以很容易地解决这个问题。只有在特定控件获得焦点时才会引发此问题。 Enter事件的唯一限制是您无法从此事件处理程序内部更改聚焦控件(但您不想这样做)。

所以现在我们需要修复闪烁问题,我认为你会觉得它很简单。在事件处理程序方法的开头(无论您使用哪一个),在开始更新组合框之前,请调用其BeginUpdate method。这可以防止控件在更新时闪烁(通过抑制绘画)。最后,您需要完成对EndUpdate的调用,该调用会重新启用绘画并执行单个重绘以反映您的更改。

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