Ejemplo n.º 1
0
 private void OnRetrieveSchemaData(TSGetDataEventArgs e)
 {
     if (RetrieveSchemaDataEvent != null)
     {
         RetrieveSchemaDataEvent(this, e);
     }
 }
Ejemplo n.º 2
0
        public virtual DataTable RetrieveOverviewData(object tag)
        {
            mTag         = tag;
            mbHasSumLine = false;
            mlstQueriedFields.Clear();

            TSGetDataEventArgs argsSchema = new TSGetDataEventArgs(tag);

            OnRetrieveSchemaData(argsSchema);
            DataTable dtSchema = argsSchema.ReturnTable;

            if (dtSchema != null)
            {
                TSGetOverviewDataEventArgs argsOverview = new TSGetOverviewDataEventArgs(dtSchema, tag);
                OnRetrieveOverviewData(argsOverview);
                DataTable dtOverview = argsOverview.ReturnTable;

                if (dtOverview != null)
                {
                    for (int i = 0, j = dtSchema.Columns.Count; i < j; i++)
                    {
                        string strColName = dtSchema.Columns[i].ColumnName;
                        if (!dtOverview.Columns.Contains(strColName))
                        {
                            dtOverview.Columns.Add(strColName, dtSchema.Columns[i].DataType);
                        }
                    }

                    for (int i = 0, j = dtSchema.Columns.Count; i < j; i++)
                    {
                        string strColName = dtSchema.Columns[i].ColumnName;
                        dtOverview.Columns[strColName].SetOrdinal(i);

                        if (!mlstQueriedFields.Contains(strColName))
                        {
                            mlstQueriedFields.Add(strColName);
                        }
                    }

                    mdtSource = dtOverview;
                    mRange.ResetRange(mdtSource.Rows.Count - 1);
                    mlstRemovedRows.Clear();
                }
            }

            return(mdtSource);
        }
Ejemplo n.º 3
0
        public virtual void RetrieveAllData(List <string> queryMoreFields)
        {
            int          iRemainCount;
            List <Point> lstPoint          = mRange.GetRemainRange(out iRemainCount);
            int          iQueryAllRowCount = 200;

            #region -- 已有数据中已存在的行,读取更多所需的字段 --

            if (iRemainCount <= iQueryAllRowCount)
            {
                bool          bNeedQuery;
                string        strMoreFields;
                List <string> lstMoreFields;
                GetQueryMoreFields(queryMoreFields, out bNeedQuery, out strMoreFields, out lstMoreFields);

                if (bNeedQuery)
                {
                    string strMoreFieldsCriteria = GetContainDataMoreFieldsCriteria();

                    if (strMoreFieldsCriteria != "")
                    {
                        TSGetDataMoreFieldsEventArgs args = new TSGetDataMoreFieldsEventArgs(mTag, strMoreFieldsCriteria, strMoreFields);
                        OnRetrieveDataMoreFields(args);

                        DataTable dtResult = args.ReturnTable;

                        MergeToResult(0, mdtSource.Rows.Count, dtResult);

                        // 将本次新增的字段加入记录中,RetrieveAllData 才需要这样做
                        if (lstMoreFields != null)
                        {
                            mlstQueriedFields.AddRange(lstMoreFields);
                        }
                    }
                }
            }

            #endregion -- 已有数据中已存在的行,读取更多所需的字段 --

            #region -- 在已有数据中仍不存在的行 --

            if (iRemainCount <= iQueryAllRowCount)
            {
                for (int i = 0, j = lstPoint.Count; i < j; i++)
                {
                    Point range  = lstPoint[i];
                    int   iCount = range.Y - range.X + 1;
                    if (iCount <= 0)
                    {
                        continue;
                    }

                    string strPageCriteria = GetPageCriteria(range.X, iCount);

                    TSGetPageDataEventArgs args = new TSGetPageDataEventArgs(strPageCriteria, iCount, mTag);
                    this.OnRetrievePageData(args);

                    DataTable dtPage = args.PageTable;

                    if (dtPage == null)
                    {
                        mRange.AddRange(range.X, iCount);
                        return;
                    }

                    MergeToResult(range.X, iCount, dtPage);
                    mRange.AddRange(range.X, iCount);
                }
            }
            else
            {
                TSGetDataEventArgs args = new TSGetDataEventArgs(mTag);
                OnRetrieveAllData(args);
                DataTable dtResult = args.ReturnTable;

                // 如果有合计行,应该在 RetrieveAllDataEvent 事件中同时处理
                mdtSource.Clear();
                mdtSource.Merge(dtResult);
                mRange.ResetRange(mdtSource.Rows.Count - (mbHasSumLine ? 2 : 1));
                mRange.AddRange(0, mRange.MaxIndex + 1);
                mlstRemovedRows.Clear();
            }

            #endregion -- 在已有数据中仍不存在的行 --
        }