【问题标题】:Loading data for the grid within form onload在表单 onload 中为网格加载数据
【发布时间】:2013-04-03 12:01:51
【问题描述】:

我在 windows 窗体上有一个网格,需要在窗体加载时填充。数据来自数据库。目前我在表单 onload 中调用 LoadData()。所以加载屏幕需要相当长的时间,因为有一个 DB 调用。

这是一个好方法吗? 我不能使用后台工作程序并异步调用 LoadData() 以便加载窗口不会有任何延迟吗?

有人可以解释一下什么是最好的方法吗?

【问题讨论】:

    标签: c# forms load


    【解决方案1】:

    在表单加载时从数据库同步加载数据不是一个好方法,您应该在单独的线程上异步加载它。

    您可以使用以下任一方式:

    1. 线程类
    2. 后台工作人员

    【讨论】:

      【解决方案2】:

      注意事项:

      1. 查询优化和搜索跟踪表索引
      2. 数据网格是复杂的对象,需要时间来更新和填充它的普通对象(特别是当有更多列时)
      3. 您必须考虑的系统硬件(Ram、CPU、VGA、...)
      4. 我认为最好的方法是对您的查询结果进行排序并按访问的最后代码分页您的结果并使用它:

        无效 NextPage()
        {
        Qr="select Top N from tbl where Code>LastCode order by Code asc";
        //读取数据
        FirstCode=Drr["Code"];//第一次记录结果
        LastCode=Drr["Code"];//最后记录结果
        }
        无效 PreviousPage()
        {
        Qr="select Top N from tbl where Code

        //读取数据

        FirstCode=Drr["Code"];//第一次记录结果
        LastCode=Drr["Code"];//最后记录结果
        }

      希望得到帮助

      【讨论】:

        【解决方案3】:

        您可以简单地使用 Dispatcher 在表单呈现后异步加载数据

                /// <summary>
                /// Handles the Loaded event of the Window control.
                /// </summary>
                /// <param name="sender">The source of the event.</param>
                /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
                private void Window_Loaded(object sender, RoutedEventArgs e)
                {
                    this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new LoadDataDelegate(LoadData));
                }
        
                private delegate void LoadDataDelegate();
        
                /// <summary>
                /// Loads the data.
                /// </summary>
                private void LoadData()
                {
                    List<string> numberDescriptions = new List<string>();
                    for (int i = 1; i <= 10000000; i++)
                    {
        
                        numberDescriptions.Add("Number " + i.ToString());
                    }
                    listBox1.ItemsSource = numberDescriptions;
                }
        

        【讨论】:

          猜你喜欢
          • 2012-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 2012-03-30
          • 2012-02-24
          相关资源
          最近更新 更多