【问题标题】:How do I show a form only when data is loaded?如何仅在加载数据时显示表单?
【发布时间】:2014-12-16 10:57:57
【问题描述】:

我需要一些帮助来解决我无法解决的问题。

我有一个带有大量数据的 DataGridView 的 Windows 窗体。 此数据存储在 SQL Server 数据库中,并由一段简单的 ADO.NET 代码检索。

我已经在使用 BackGroundWorker 类来执行这种操作,但表单仍然冻结 1-2 秒。

有没有办法延迟表格的显示?仅在加载所有数据时才像显示表单一样?我试图让它不可见或使用 Hide() 和 Show() 方法但仍然没有任何结果。

【问题讨论】:

  • 向我们展示您的工人代码。
  • 嗨,莫。谢谢你的回答。 BackGroundWorker 的代码非常简单。我调用一个填充绑定列表并将其设置为我的 DataGridView 的 DataSource 的方法。
  • 您可能不想等到数据加载完毕再显示表单。用户看到一个空的表单然后被填充,而不是让他们想知道为什么屏幕上什么都没有出现。
  • 可能。就我而言,完美的解决方案是这样的:按下按钮,初始化表单,用加载的数据填充表单/datagridview,显示表单。花了大约2秒。在那个时候,我想在一个新线程中显示一个“请稍候......”表单。
  • 为什么数据量大?为什么不是基于某些搜索条件的有限集合?

标签: c# .net winforms ado


【解决方案1】:

我找到了一个简单的解决方法。 将 BackGroundWorker 的修饰符更改为 public。 创建表单的实例,运行 Form.CreateControl() 并调用 BackGroundWorker.RunWorkerAsync() 方法。 在 DoWork 事件中,我放置了:数据检索和控件填充(DataGridView、组合框和文本框)。 在 RunWorkerCompleted 中只有 Form.Show() 方法。 就这样。这是一个不错的解决方案吗?

【讨论】:

    【解决方案2】:

    从表单的构造函数中删除InitializeComponent();,并在数据加载后调用此方法

    【讨论】:

    • 我不能这样做,因为我需要表单的所有控件。
    • @MoPatel 随机回答!.. :)
    • @MoPatel 我认为加载表单不会出现 1-2 秒的明显延迟。但是,此解决方案不合适,因为需要控制。
    • @Dr_klo 我想没有人知道答案。我想这是一件轻松的工作。尝试再解释一次:单击按钮-> 在表单上加载数据(填充组合框、文本框、datagridview - 大约 2 秒)-> 显示表单。就是这样。
    • @Nicola 以前我认为表单在与数据一起加载时被冻结。谢谢你的解释。
    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多