DataSourceOperationStatement.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System.Collections;
  2. using System.Data;
  3. using IwbZero.IocNamed;
  4. using IwbZero.IwbBase;
  5. using IwbZero.IwbDataQuery;
  6. using IwbZero.ToolCommon.StringModel;
  7. using WeEngine.ComponentInfo;
  8. using WeEngine.Components.InterfaceFactory;
  9. namespace WeEngine.Components.Statements
  10. {
  11. /// <summary>
  12. /// 设置数据源记录条数
  13. /// </summary>
  14. [IocNamed(CompStmtType.DataSourceOperation)]
  15. public class DataSourceOperationStatement : IStatementRunner
  16. {
  17. public bool Run(ComponentRunner runner, IwbXmlNode poStatement)
  18. {
  19. string str = poStatement.GetChildValue("Operation").UAndT();
  20. string childValue = poStatement.GetChildValue("Condition");
  21. string pcDataSourceId = poStatement.GetChildValue("DataSourceId");
  22. string str4 = poStatement.GetChildValue("OriginalId");
  23. IwbDataSource dataSource = runner.GetDataSource(pcDataSourceId);
  24. IwbDataSource source2 = null;
  25. if (str4 != "")
  26. {
  27. source2 = runner.GetDataSource(str4);
  28. }
  29. if (dataSource == null)
  30. {
  31. return false;
  32. }
  33. switch (str)
  34. {
  35. case "OPEN":
  36. {
  37. ArrayList list = Condition.ConditionMappingToArrayList(childValue);
  38. string pcSource = "";
  39. foreach (Condition condition in list)
  40. {
  41. string str6;
  42. string source = condition.Source;
  43. string key = condition.Target.UAndT();
  44. if (runner.FilterFields.ContainsKey(key))
  45. {
  46. str6 = runner.FilterFields[key].ToString();
  47. if (str6 == "")
  48. {
  49. source = "";
  50. }
  51. }
  52. else
  53. {
  54. str6 = runner.Evaluate(condition.Target);
  55. }
  56. if (source != "")
  57. {
  58. pcSource = pcSource.AddStr( $"[{source}]=[{str6}]");
  59. }
  60. }
  61. IwbQuery query = dataSource.GetData(pcSource);
  62. if ((query != null) && query.IsOpened)
  63. {
  64. dataSource.Data = query;
  65. return true;
  66. }
  67. return false;
  68. }
  69. case "NEWRECORD":
  70. if ((dataSource.Data != null) && dataSource.Data.IsOpened)
  71. {
  72. dataSource.Data.NewRow();
  73. }
  74. return true;
  75. case "DELETERECORD":
  76. if ((dataSource.Data != null) && (dataSource.Data.CurrentRow != null))
  77. {
  78. dataSource.Data.DeleteCurrentRow();
  79. }
  80. return true;
  81. case "CLEAR":
  82. if ((dataSource.Data != null) && dataSource.Data.IsOpened)
  83. {
  84. dataSource.Data.CurrentTable.Rows.Clear();
  85. dataSource.Data.CurrentTable.AcceptChanges();
  86. }
  87. return true;
  88. case "ACCEPT":
  89. if ((dataSource.Data != null) && dataSource.Data.IsOpened)
  90. {
  91. dataSource.Data.CurrentTable.AcceptChanges();
  92. }
  93. return true;
  94. case "UNDO":
  95. if ((dataSource.Data != null) && dataSource.Data.IsOpened)
  96. {
  97. dataSource.Data.CurrentTable.RejectChanges();
  98. }
  99. return true;
  100. case "COPYCURRENT":
  101. if (((dataSource.Data != null) && dataSource.Data.IsOpened) && ((source2?.Data != null) && (source2.Data.CurrentRow != null)))
  102. {
  103. dataSource.Data.AddCurrentRowFrom(source2.Data);
  104. }
  105. return true;
  106. case "COPYRECORDS":
  107. if (((dataSource.Data != null) && dataSource.Data.IsOpened) && ((source2?.Data != null) && (source2.Data.CurrentRow != null)))
  108. {
  109. DataRow currentRow = source2.Data.CurrentRow;
  110. childValue = Condition.ConditionMappingToConditionString(childValue);
  111. for (int i = 0; i < source2.Data.RecCount; i++)
  112. {
  113. source2.Data.Go(i);
  114. if (runner.EvaluateBool(childValue))
  115. {
  116. dataSource.Data.AddCurrentRowFrom(source2.Data);
  117. }
  118. }
  119. source2.Data.GoTo(currentRow);
  120. }
  121. return true;
  122. case "Sort":
  123. {
  124. ArrayList list2 = poStatement.GetChildValue("Sorting").MappingToArrayList();
  125. string pcSort = "";
  126. foreach (IwbIdName name in list2)
  127. {
  128. string str12 = pcSort;
  129. pcSort = str12 + name.Id + " " + name.Name + ",";
  130. }
  131. pcSort = pcSort.TrimEnd(new char[] { ',' });
  132. if (pcSort != "")
  133. {
  134. dataSource.Data.SortBy(pcSort);
  135. }
  136. return true;
  137. }
  138. }
  139. return true;
  140. }
  141. }
  142. }