StatisticsTJ.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using WWPipeLine.MapBasic.Conditions;
  11. using WeifenLuo.WinFormsUI.Docking;
  12. using WWPipeLine.MapBasic;
  13. using Sunny.UI;
  14. using SuperMap.Data;
  15. namespace WWPipeLine.MapTools.Conditions.Statistics
  16. {
  17. public partial class StatisticsTJ : ConditionPanel
  18. {
  19. public bool isGeo = false;
  20. DatasetVector dv;
  21. public StatisticsTJ()
  22. {
  23. this.ConditionPanelName = "条件统计";
  24. InitializeComponent();
  25. this.SetSize(500, 600);
  26. }
  27. protected override void OnLoad(EventArgs e)
  28. {
  29. uibtndengyu.Click += uibtnCaoZuoFu_Click;
  30. uibtnbudengyu.Click += uibtnCaoZuoFu_Click;
  31. uibtnLike.Click += uibtnCaoZuoFu_Click;
  32. uibtndayu.Click += uibtnCaoZuoFu_Click;
  33. uibtnxiaoyu.Click += uibtnCaoZuoFu_Click;
  34. uibtnAnd.Click += uibtnCaoZuoFu_Click;
  35. uibtndydy.Click += uibtnCaoZuoFu_Click;
  36. uibtnxydy.Click += uibtnCaoZuoFu_Click;
  37. uibtnOr.Click += uibtnCaoZuoFu_Click;
  38. uibtnzuokuohao.Click += uibtnCaoZuoFu_Click;
  39. uibtnyoukuohao.Click += uibtnCaoZuoFu_Click;
  40. uibtnIs.Click += uibtnCaoZuoFu_Click;
  41. uibtnbaifenhao.Click += uibtnCaoZuoFu_Click;
  42. uibtnNot.Click += uibtnCaoZuoFu_Click;
  43. uibtnNull.Click += uibtnCaoZuoFu_Click;
  44. ComsStatic.BindUICombox(uicbxLayer);
  45. }
  46. public override object Do(DockPanel dockPanel = null)
  47. {
  48. if (isGeo)
  49. {
  50. if (MapControl.Map.TrackingLayer.IndexOf(ComsStatic.ControlToolsTrackingName) == -1)
  51. {
  52. Sunny.UI.UIMessageTip.ShowError("请先绘制区域"); return false;
  53. }
  54. }
  55. string fieldKey = (uicbxTongji.SelectedItem as DoListItem).Key;
  56. string fieldValue = uicbxTongji.SelectedItem.ToString();
  57. if (string.IsNullOrEmpty(uitbSql.Text))
  58. {
  59. UIMessageTip.ShowError("请设定查询条件"); return false;
  60. }
  61. DataTable dt = new DataTable();
  62. dt.Columns.Add(fieldValue + "类别"); dt.Columns.Add("数量");
  63. string fc = string.Empty;
  64. DataRow dr;
  65. Recordset rd = ComsStatic.QueryRecordset(dv, uitbSql.Text, new string[] { fieldKey }, new string[] { fieldKey }, new string[] { fieldKey });
  66. if (isGeo)
  67. {
  68. GeoRegion geo = MapControl.Map.TrackingLayer.Get(MapControl.Map.TrackingLayer.IndexOf(ComsStatic.ControlToolsTrackingName)) as GeoRegion;
  69. rd.MoveFirst();
  70. while (!rd.IsEOF)
  71. {
  72. dr = dt.NewRow();
  73. fc = rd.GetFieldValue(fieldKey)?.ToString();
  74. if (string.IsNullOrEmpty(fc))
  75. {
  76. dr[0] = "未知";
  77. dr[1] = dv.Query(geo, 0, string.Format("{0} is null", fieldKey), CursorType.Static).RecordCount;
  78. }
  79. else
  80. {
  81. dr[0] = fc;
  82. dr[1] = dv.Query(geo, 0, string.Format("{0}='{1}'", fieldKey, fc), CursorType.Static).RecordCount;
  83. }
  84. dt.Rows.Add(dr);
  85. rd.MoveNext();
  86. }
  87. dr = dt.NewRow();
  88. dr[0] = "总量"; dr[1] = dv.Query(geo, 0, "", CursorType.Static).RecordCount;
  89. dt.Rows.Add(dr);
  90. }
  91. else
  92. {
  93. rd.MoveFirst();
  94. while (!rd.IsEOF)
  95. {
  96. dr = dt.NewRow();
  97. fc = rd.GetFieldValue(fieldKey)?.ToString();
  98. if (string.IsNullOrEmpty(fc))
  99. {
  100. dr[0] = "未知";
  101. dr[1] = dv.Query(string.Format("{0} is null", fieldKey), CursorType.Static).RecordCount;
  102. }
  103. else
  104. {
  105. dr[0] = fc;
  106. dr[1] = dv.Query(string.Format("{0}='{1}'", fieldKey, fc), CursorType.Static).RecordCount;
  107. }
  108. dt.Rows.Add(dr);
  109. rd.MoveNext();
  110. }
  111. dr = dt.NewRow();
  112. dr[0] = "总量"; dr[1] = dv.RecordCount;
  113. dt.Rows.Add(dr);
  114. }
  115. ComsStatic.RecordsetDispose(rd);
  116. return dt;
  117. }
  118. private void uibtnSqltest_Click(object sender, EventArgs e)
  119. {
  120. if (string.IsNullOrEmpty(uitbSql.Text))
  121. {
  122. UIMessageTip.ShowError("请设定查询条件"); return;
  123. }
  124. Recordset rd = null;
  125. if (isGeo)
  126. {
  127. int index = MapControl.Map.TrackingLayer.IndexOf(ComsStatic.ControlToolsTrackingName);
  128. if (index == -1)
  129. {
  130. Sunny.UI.UIMessageTip.ShowError("请先绘制区域"); return;
  131. }
  132. GeoRegion geo = MapControl.Map.TrackingLayer.Get(index) as GeoRegion;
  133. rd = dv.Query(geo, 0, uitbSql.Text, CursorType.Static);
  134. }
  135. else
  136. rd = dv.Query(uitbSql.Text, CursorType.Static);
  137. if (rd.IsEmpty)
  138. {
  139. ComsStatic.ShowErrorLog("条件错误或者查询结果为空", uitbSql.Text);
  140. }
  141. else
  142. {
  143. ComsStatic.ShowOKLog("查询语句设置正确", uitbSql.Text);
  144. }
  145. ComsStatic.RecordsetDispose(rd);
  146. }
  147. private void uicbxLayer_SelectedIndexChanged(object sender, EventArgs e)
  148. {
  149. DoListItem item = (DoListItem)uicbxLayer.SelectedItem;
  150. dv = ComsStatic.Datasource.Datasets[item.Key] as DatasetVector;
  151. if (dv is null) { UIMessageTip.ShowError("当前选择的图层没有匹配的数据源"); return; }
  152. uicbxFields.Items.Clear();
  153. foreach (FieldInfo info in dv.FieldInfos)
  154. {
  155. if (ComsStatic.HideEnableTag.Contains("," + info.Name.ToLower() + ",") || info.IsSystemField) continue;
  156. uicbxFields.Items.Add(new DoListItem(info.Name, info.Caption));
  157. uicbxTongji.Items.Add(new DoListItem(info.Name, info.Caption));
  158. }
  159. uicbxFields.SelectedIndex = 0; uicbxTongji.SelectedIndex = 0;
  160. }
  161. private void uicbxFields_SelectedIndexChanged(object sender, EventArgs e)
  162. {
  163. string fieldValue = (uicbxFields.SelectedItem as DoListItem).Key;
  164. Recordset rd = ComsStatic.QueryRecordset(dv, string.Format(" {0} is not null", fieldValue), new string[] { fieldValue }, new string[] { fieldValue }, new string[] { fieldValue });
  165. uilbValues.Items.Clear();
  166. rd.MoveFirst();
  167. while (!rd.IsEOF)
  168. {
  169. uilbValues.Items.Add(rd.GetFieldValue(fieldValue).ToString());
  170. rd.MoveNext();
  171. }
  172. ComsStatic.RecordsetDispose(rd);
  173. }
  174. private void uibtnCaoZuoFu_Click(object sender, EventArgs e)
  175. {
  176. UIButton uiBtn = sender as UIButton;
  177. if (uiBtn.Tag?.ToString() == "hasField")
  178. {
  179. string fieldValue = (uicbxFields.SelectedItem as DoListItem).Key;
  180. uitbSql.Text = string.Format(" {0} {1} {2} ", uitbSql.Text, fieldValue, uiBtn.Text);
  181. }
  182. else
  183. uitbSql.Text = string.Format(" {0} {1} ", uitbSql.Text, uiBtn.Text);
  184. }
  185. private void uibtnSqlClear_Click(object sender, EventArgs e)
  186. {
  187. uitbSql.Text = "";
  188. }
  189. private void uilbValues_ItemDoubleClick(object sender, EventArgs e)
  190. {
  191. uitbSql.Text += uilbValues.SelectedItem?.ToString();
  192. }
  193. }
  194. }