在表单onload中加载网格数据

时间:2013-04-03 12:01:51

标签: c# forms load

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

  1. 线程类
  2. 后台工作者

答案 1 :(得分:0)

注意:

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

    void NextPage()
     {
       Qr =“从代码>按代码asc选择LastCode顺序的tbl中选择前N个”;    //阅读数据
       FirstCode = Drr [“Code”]; //用于第一个记录结果
       LastCode = Drr [“Code”]; //用于最后记录结果
     }
     void PreviousPage()
     {
       Qr =“从Tbl中选择前N个,其中Code< FirstCode order by Code asc”;

    //读取数据

    FirstCode = Drr [“Code”]; //用于第一个记录结果
       LastCode = Drr [“Code”]; //用于最后记录结果
     }

  5. 希望这个帮助

答案 2 :(得分:0)

你可以使用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;
        }