| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using System.Data;
- using IwbZero.IocNamed;
- using IwbZero.IwbBase;
- using IwbZero.IwbDataQuery;
- using WeEngine.ComponentInfo;
- using WeEngine.Components.InterfaceFactory;
- namespace WeEngine.Components.Statements
- {
- /// <summary>
- /// 多条记录循环执行事务
- /// </summary>
- [IocNamed(CompStmtType.LoopQuery)]
- public class LoopQueryStatement : IStatementRunner
- {
- public bool Run(ComponentRunner runner, IwbXmlNode poStatement)
- {
- {
- bool flag = true;
- string childValue = poStatement.GetChildValue("Condition");
- string pcDataSourceId = poStatement.GetChildValue("DataSourceId");
- IwbXmlNode childNode = poStatement.GetChildNode("Content");
- IwbDataSource dataSource = runner.GetDataSource(pcDataSourceId);
- if ((childNode != null) && (childNode.Nodes.Count > 0))
- {
- if (((dataSource == null) || (dataSource.Data == null)) || !dataSource.Data.IsOpened)
- {
- return false;
- }
- var data = dataSource.Data;
- DataRow currentRow = data.CurrentRow;
- //data.IsToFireRecordMovedEvent = false;
- data.MoveFirst();
- childValue = Condition.ConditionMappingToConditionString(childValue);
- childValue= childValue.Replace("[", "").Replace("]", "");
- for (int i = 0; i < data.RecCount; i++)
- {
- data.Go(i);
- //runner.ShowRecordInfo(recCount, i + 1, "");
- if (runner.EvaluateBool(childValue))
- {
- runner.RunStatements(childNode.Nodes);
- }
- if (!runner.ProcessResult)
- {
- flag = false;
- break;
- }
- }
- data.GoTo(currentRow);
- //data.IsToFireRecordMovedEvent = true;
- }
- return flag;
- }
- }
- }
- }
|