Exemplo n.º 1
0
        /// <summary>
        /// 重置自动查询
        /// </summary>
        /// <param name="parentQueryBehavior">上级查询行为</param>
        public void ResetAutoQuery(ReportQueryBehavior parentQueryBehavior = null)
        {
            var controller = Controller as ReportTableController;

            if (parentQueryBehavior != null)
            {
                ParentQueryBehavior = parentQueryBehavior;
            }
            var queryBehavior = controller.QueryBehavior;

            if (queryBehavior == null)
            {
                queryBehavior = ParentQueryBehavior;
            }
            if (queryBehavior != null)
            {
                ResetAutoQueryTimer(queryBehavior.AutoQueryInterval);
            }
            else
            {
                ResetAutoQueryTimer(-1);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 查询表,查询前不清空数据
        /// </summary>
        /// <param name="dataTable">数据表,用于保存结果</param>
        /// <param name="queryAll">是否查询所有数据</param>
        public void QueryTable(DataTable dataTable, bool queryAll)
        {
            var controller = Controller as ReportTableController;

            StartQuery();
            if (controller.DataFetcher != null)
            {
                var       dataFetcher = controller.DataFetcher.Value;
                DataTable queryTable  = null;

                int currentCount = 0;

                // 获取当前行号
                currentCount = DataTable.Rows.Count;

                // 获取查询行为
                ReportQueryBehavior queryBehavior = controller.QueryBehavior;
                if (queryBehavior == null)
                {
                    queryBehavior = controller.QueryBehavior;
                }
                // 获取每次查询的最大量
                int maxCount = 0;
                if (!queryAll && queryBehavior != null)
                {
                    maxCount = queryBehavior.QueryCountPerTime;
                }
                if (maxCount <= 0)
                {
                    maxCount = Int32.MaxValue;
                }

                var    paramValues = ParameterValues;
                Action query       = () =>
                {
                    queryTable           = dataFetcher.FetchData(currentCount, maxCount, paramValues);
                    queryTable.TableName = controller.TableName;
                };

                Action queryComplete = () =>
                {
                    // 如果当前DataTable已经变化,说明在上一次查询完成前开始了下一轮查询,则不再继续查询
                    if (dataTable != DataTable)
                    {
                        return;
                    }

                    if (queryTable != null)
                    {
                        if (queryTable.Rows.Count < maxCount)
                        {
                            QueryCompleted = true;
                        }
                        else
                        {
                            QueryCompleted = false;
                        }
                        DataTable.Merge(queryTable);

                        RowCount = DataTable.Rows.Count;

                        if (DataFetched != null)
                        {
                            DataFetched(this, new DataFetchedEventArgs(queryTable));
                        }
                    }
                    EndQuery();
                };

                // 异步查询(避免同步查询导致的死机问题)
                QueryWorker         = new BackgroundWorker();
                QueryWorker.DoWork += (s, e) =>
                {
                    query();
                };
                QueryWorker.RunWorkerCompleted += (s, e) =>
                {
                    // 如果背景线程已经取消,则不再执行后续工作
                    if (QueryWorker.CancellationPending)
                    {
                        return;
                    }

                    queryComplete();
                };
                QueryWorker.RunWorkerAsync(DataTable);
            }
        }