private void OnRetrieveSchemaData(TSGetDataEventArgs e) { if (RetrieveSchemaDataEvent != null) { RetrieveSchemaDataEvent(this, e); } }
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); }
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 -- 在已有数据中仍不存在的行 -- }