using System.Data; using IwbZero.IocNamed; using IwbZero.IwbBase; using IwbZero.IwbDataQuery; using WeEngine.ComponentInfo; using WeEngine.Components.InterfaceFactory; namespace WeEngine.Components.Statements { /// /// 多条记录循环执行事务 /// [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; } } } }