using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WWPipeLine.MapBasic.Conditions; using WeifenLuo.WinFormsUI.Docking; using WWPipeLine.MapBasic; using Sunny.UI; using SuperMap.Data; namespace WWPipeLine.MapTools.Conditions.Statistics { public partial class StatisticsTJ : ConditionPanel { public bool isGeo = false; DatasetVector dv; public StatisticsTJ() { this.ConditionPanelName = "条件统计"; InitializeComponent(); this.SetSize(500, 600); } protected override void OnLoad(EventArgs e) { uibtndengyu.Click += uibtnCaoZuoFu_Click; uibtnbudengyu.Click += uibtnCaoZuoFu_Click; uibtnLike.Click += uibtnCaoZuoFu_Click; uibtndayu.Click += uibtnCaoZuoFu_Click; uibtnxiaoyu.Click += uibtnCaoZuoFu_Click; uibtnAnd.Click += uibtnCaoZuoFu_Click; uibtndydy.Click += uibtnCaoZuoFu_Click; uibtnxydy.Click += uibtnCaoZuoFu_Click; uibtnOr.Click += uibtnCaoZuoFu_Click; uibtnzuokuohao.Click += uibtnCaoZuoFu_Click; uibtnyoukuohao.Click += uibtnCaoZuoFu_Click; uibtnIs.Click += uibtnCaoZuoFu_Click; uibtnbaifenhao.Click += uibtnCaoZuoFu_Click; uibtnNot.Click += uibtnCaoZuoFu_Click; uibtnNull.Click += uibtnCaoZuoFu_Click; ComsStatic.BindUICombox(uicbxLayer); } public override object Do(DockPanel dockPanel = null) { if (isGeo) { if (MapControl.Map.TrackingLayer.IndexOf(ComsStatic.ControlToolsTrackingName) == -1) { Sunny.UI.UIMessageTip.ShowError("请先绘制区域"); return false; } } string fieldKey = (uicbxTongji.SelectedItem as DoListItem).Key; string fieldValue = uicbxTongji.SelectedItem.ToString(); if (string.IsNullOrEmpty(uitbSql.Text)) { UIMessageTip.ShowError("请设定查询条件"); return false; } DataTable dt = new DataTable(); dt.Columns.Add(fieldValue + "类别"); dt.Columns.Add("数量"); string fc = string.Empty; DataRow dr; Recordset rd = ComsStatic.QueryRecordset(dv, uitbSql.Text, new string[] { fieldKey }, new string[] { fieldKey }, new string[] { fieldKey }); if (isGeo) { GeoRegion geo = MapControl.Map.TrackingLayer.Get(MapControl.Map.TrackingLayer.IndexOf(ComsStatic.ControlToolsTrackingName)) as GeoRegion; rd.MoveFirst(); while (!rd.IsEOF) { dr = dt.NewRow(); fc = rd.GetFieldValue(fieldKey)?.ToString(); if (string.IsNullOrEmpty(fc)) { dr[0] = "未知"; dr[1] = dv.Query(geo, 0, string.Format("{0} is null", fieldKey), CursorType.Static).RecordCount; } else { dr[0] = fc; dr[1] = dv.Query(geo, 0, string.Format("{0}='{1}'", fieldKey, fc), CursorType.Static).RecordCount; } dt.Rows.Add(dr); rd.MoveNext(); } dr = dt.NewRow(); dr[0] = "总量"; dr[1] = dv.Query(geo, 0, "", CursorType.Static).RecordCount; dt.Rows.Add(dr); } else { rd.MoveFirst(); while (!rd.IsEOF) { dr = dt.NewRow(); fc = rd.GetFieldValue(fieldKey)?.ToString(); if (string.IsNullOrEmpty(fc)) { dr[0] = "未知"; dr[1] = dv.Query(string.Format("{0} is null", fieldKey), CursorType.Static).RecordCount; } else { dr[0] = fc; dr[1] = dv.Query(string.Format("{0}='{1}'", fieldKey, fc), CursorType.Static).RecordCount; } dt.Rows.Add(dr); rd.MoveNext(); } dr = dt.NewRow(); dr[0] = "总量"; dr[1] = dv.RecordCount; dt.Rows.Add(dr); } ComsStatic.RecordsetDispose(rd); return dt; } private void uibtnSqltest_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(uitbSql.Text)) { UIMessageTip.ShowError("请设定查询条件"); return; } Recordset rd = null; if (isGeo) { int index = MapControl.Map.TrackingLayer.IndexOf(ComsStatic.ControlToolsTrackingName); if (index == -1) { Sunny.UI.UIMessageTip.ShowError("请先绘制区域"); return; } GeoRegion geo = MapControl.Map.TrackingLayer.Get(index) as GeoRegion; rd = dv.Query(geo, 0, uitbSql.Text, CursorType.Static); } else rd = dv.Query(uitbSql.Text, CursorType.Static); if (rd.IsEmpty) { ComsStatic.ShowErrorLog("条件错误或者查询结果为空", uitbSql.Text); } else { ComsStatic.ShowOKLog("查询语句设置正确", uitbSql.Text); } ComsStatic.RecordsetDispose(rd); } private void uicbxLayer_SelectedIndexChanged(object sender, EventArgs e) { DoListItem item = (DoListItem)uicbxLayer.SelectedItem; dv = ComsStatic.Datasource.Datasets[item.Key] as DatasetVector; if (dv is null) { UIMessageTip.ShowError("当前选择的图层没有匹配的数据源"); return; } uicbxFields.Items.Clear(); foreach (FieldInfo info in dv.FieldInfos) { if (ComsStatic.HideEnableTag.Contains("," + info.Name.ToLower() + ",") || info.IsSystemField) continue; uicbxFields.Items.Add(new DoListItem(info.Name, info.Caption)); uicbxTongji.Items.Add(new DoListItem(info.Name, info.Caption)); } uicbxFields.SelectedIndex = 0; uicbxTongji.SelectedIndex = 0; } private void uicbxFields_SelectedIndexChanged(object sender, EventArgs e) { string fieldValue = (uicbxFields.SelectedItem as DoListItem).Key; Recordset rd = ComsStatic.QueryRecordset(dv, string.Format(" {0} is not null", fieldValue), new string[] { fieldValue }, new string[] { fieldValue }, new string[] { fieldValue }); uilbValues.Items.Clear(); rd.MoveFirst(); while (!rd.IsEOF) { uilbValues.Items.Add(rd.GetFieldValue(fieldValue).ToString()); rd.MoveNext(); } ComsStatic.RecordsetDispose(rd); } private void uibtnCaoZuoFu_Click(object sender, EventArgs e) { UIButton uiBtn = sender as UIButton; if (uiBtn.Tag?.ToString() == "hasField") { string fieldValue = (uicbxFields.SelectedItem as DoListItem).Key; uitbSql.Text = string.Format(" {0} {1} {2} ", uitbSql.Text, fieldValue, uiBtn.Text); } else uitbSql.Text = string.Format(" {0} {1} ", uitbSql.Text, uiBtn.Text); } private void uibtnSqlClear_Click(object sender, EventArgs e) { uitbSql.Text = ""; } private void uilbValues_ItemDoubleClick(object sender, EventArgs e) { uitbSql.Text += uilbValues.SelectedItem?.ToString(); } } }