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 SuperMap.Data; using SuperMap.Mapping; using Sunny.UI; using System.IO; namespace WWPipeLine.MapTools.Conditions.ShuJuChuLi { public partial class PCCheck : ConditionPanel { DataTable dt = null; public PCCheck() { this.ConditionPanelName = "普查数据检查"; InitializeComponent(); this.SetSize(1000, 600); this.IsShowResultWindow = false; this.IsShowPanelFooter = false; } protected override void OnLoad(EventArgs e) { ComsStatic.setUIDataGridView(uidgv); uirbtGD.Checked = true; } private void uiButton1_Click(object sender, EventArgs e) { //if (dt == null || dt.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先选择普查表类型"); return; } OpenFileDialog ofd = new OpenFileDialog { Filter = "CSV文件|*.csv", RestoreDirectory = true, Title = "请选择需要上传的文件" }; if (ofd.ShowDialog() != DialogResult.OK) return; uidgv.DataSource = ComsStatic.CSVToDataTable(ofd.FileName, uirbnT.Checked); if (uidgv.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("当前普查数据为空"); return; } List listPuCha = new List(); foreach (DataGridViewColumn dc in uidgv.Columns) { listPuCha.Add(dc.Name); } panel1.Controls.Clear(); panel2.Controls.Clear(); foreach (DataRow dr in dt.Rows) { string pzKey = dr["pzKey"].ToString(); Point p = new Point(10, uiGroupBox2.Controls.Find("cbxPeiZhi", true).Length * 40); UILabel cbxPeiZhi = new UILabel() { Name = "cbxPeiZhi", Size = new Size(180, 30), TextAlign = ContentAlignment.MiddleRight, Text = string.Format("{0}对应字段:", pzKey) }; cbxPeiZhi.Location = p; panel1.Controls.Add(cbxPeiZhi); UIComboBox cbxPuCha = new UIComboBox() { Name = pzKey, Tag = pzKey, TagString = dr["gxcz"]?.ToString(), DropDownStyle = UIDropDownStyle.DropDownList, Size = new Size(180, 30) }; cbxPuCha.Items.Add("非检查项"); foreach (string pz in listPuCha.ToArray()) { cbxPuCha.Items.Add(pz); } cbxPuCha.Location = p; cbxPuCha.SelectedIndex = 0; panel2.Controls.Add(cbxPuCha); } uirbnF.Enabled = false; uirbnT.Enabled = false; uirbtGD.Enabled = false; uirbtGX.Enabled = false; uiButton1.Enabled = false; } private void uibtnChengtu_Click(object sender, EventArgs e) { if (panel2.Controls.Count == 0 || uidgv.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先加载普查数据"); return; } bool isChecked = true; foreach (Control c in panel2.Controls) { UIComboBox cbx = c as UIComboBox; if (cbx.TagString != "成图必须字段") continue; if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning(cbx.Name + ",该项为成图必须字段,请选择对应的普查字段", 4000); isChecked = false; break; } } if (isChecked) Sunny.UI.UIMessageTip.ShowOk("成图必须字段检查通过", 2000, false); } private void uiButton2_Click(object sender, EventArgs e) { if (panel2.Controls.Count == 0 || uidgv.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先加载普查数据"); return; } foreach (Control c in panel2.Controls) { UIComboBox cbx = c as UIComboBox; if (cbx.TagString != "业务关键字段") continue; if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning(cbx.Name + ",该项为业务关键字段,请选择对应的普查字段", 4000); return; } } Sunny.UI.UIMessageTip.ShowOk("业务关键字段检查通过", 2000, false); } private void uibtnGdzb_Click(object sender, EventArgs e) { if (!uirbtGD.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管点表检查"); return; } StringBuilder sb = new StringBuilder(); foreach (string pzxy in new string[] { "X坐标", "Y坐标" }) { Control[] cs = panel2.Controls.Find(pzxy, true); if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError(pzxy + "检查配置未发现"); return; } UIComboBox cbx = cs[0] as UIComboBox; if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning(pzxy + "对应的普查字段未选择"); return; } DataRow[] drs = dt.Select(string.Format(" pzkey='{0}'", pzxy)); if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError(pzxy + "检查配置未发现"); return; } double valueMax = ComsStatic.StringToDouble(drs[0]["gxczjj"]); double valueMin = ComsStatic.StringToDouble(drs[0]["gxspjj"]); foreach (DataGridViewRow dr in uidgv.Rows) { double value = ComsStatic.StringToDouble(dr.Cells[cbx.SelectedItem.ToString()].Value); if (value == 0) { sb.AppendFormat("第{0}行中,{1}为空\n\r", dr.Index + 1, pzxy); break; } if (valueMax != 0 && valueMax < value) { sb.AppendFormat("第{0}行中,{1}的值大于配置项的最大值{2}\n\r", dr.Index + 1, pzxy, valueMax); break; } if (valueMin != 0 && valueMin > value) { sb.AppendFormat("第{0}行中,{1}的值小于配置项的最小值{2}\n\r", dr.Index + 1, pzxy, valueMin); break; } } } if (sb.ToString().Length == 0) Sunny.UI.UIMessageTip.ShowOk("管点坐标检查通过", 2000, false); else Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000); } private void uirbtGX_CheckedChanged(object sender, EventArgs e) { string sql = "pzlx='普查数据检查配置' and gxlx='管点表'"; // and valueBefore<>null and pzKey<>null if (uirbtGX.Checked) sql = "pzlx='普查数据检查配置' and gxlx='管线表'"; Recordset rd = ComsStatic.dvConfig.Query(sql, CursorType.Static); dt = ComsStatic.RecordsetToDataTable(rd); } private void uibtnGdgc_Click(object sender, EventArgs e) { if (!uirbtGD.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管点表检查"); return; } StringBuilder sb = new StringBuilder(); Control[] cs = panel2.Controls.Find("地面高程", true); if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("地面高程检查配置未发现"); return; } UIComboBox cbx = cs[0] as UIComboBox; if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning("地面高程对应的普查字段未选择"); return; } DataRow[] drs = dt.Select(" pzkey='地面高程' "); if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("地面高程检查配置未发现"); return; } double valueMax = ComsStatic.StringToDouble(drs[0]["gxczjj"]); double valueMin = ComsStatic.StringToDouble(drs[0]["gxspjj"]); foreach (DataGridViewRow dr in uidgv.Rows) { double value = ComsStatic.StringToDouble(dr.Cells[cbx.SelectedItem.ToString()].Value); if (value == 0) { sb.AppendFormat("第{0}行中,地面高程为空或为0\n\r", dr.Index + 1); break; } if (valueMax != 0 && valueMax < value) { sb.AppendFormat("第{0}行中,地面高程的值大于配置项的最大值{1}\n\r", dr.Index + 1, valueMax); break; } if (valueMin != 0 && valueMin > value) { sb.AppendFormat("第{0}行中,地面高程的值小于配置项的最小值{1}\n\r", dr.Index + 1, valueMin); break; } } if (sb.ToString().Length == 0) Sunny.UI.UIMessageTip.ShowOk("管点坐标检查通过", 2000, false); else Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000); } private void uibtnGxcz_Click(object sender, EventArgs e) { if (!uirbtGX.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管线表检查"); return; } StringBuilder sb = new StringBuilder(); Control[] cs = panel2.Controls.Find("材质", true); if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("材质检查配置未发现"); return; } UIComboBox cbx = cs[0] as UIComboBox; if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning("材质对应的普查字段未选择"); return; } DataRow[] drs = dt.Select(" pzkey='材质' "); if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("材质检查配置未发现"); return; } foreach (DataGridViewRow dr in uidgv.Rows) { if (string.IsNullOrEmpty(dr.Cells[cbx.SelectedItem.ToString()].Value?.ToString())) { sb.AppendFormat("第{0}行中,材质为空\n\r", dr.Index + 1); } } if (sb.ToString().Length == 0) Sunny.UI.UIMessageTip.ShowOk("材质检查通过", 2000, false); else Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000); } private void uibtnGxgj_Click(object sender, EventArgs e) { if (!uirbtGX.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管点表检查"); return; } StringBuilder sb = new StringBuilder(); Control[] cs = panel2.Controls.Find("管径", true); if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("管径检查配置未发现"); return; } UIComboBox cbx = cs[0] as UIComboBox; if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning("管径对应的普查字段未选择"); return; } DataRow[] drs = dt.Select(" pzkey='管径' "); if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("管径检查配置未发现"); return; } double valueMax = ComsStatic.StringToDouble(drs[0]["gxczjj"]); double valueMin = ComsStatic.StringToDouble(drs[0]["gxspjj"]); foreach (DataGridViewRow dr in uidgv.Rows) { double value = ComsStatic.StringToDouble(dr.Cells[cbx.SelectedItem.ToString()].Value); if (value == 0) { sb.AppendFormat("第{0}行中,管径为空\n\r", dr.Index + 1); break; } if (valueMax != 0 && valueMax < value) { sb.AppendFormat("第{0}行中,管径的值大于配置项的最大值{1}\n\r", dr.Index + 1, valueMax); break; } if (valueMin != 0 && valueMin > value) { sb.AppendFormat("第{0}行中,管径的值小于配置项的最小值{1}\n\r", dr.Index + 1, valueMin); break; } } if (sb.ToString().Length == 0) Sunny.UI.UIMessageTip.ShowOk("管径检查通过", 2000, false); else Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000); } } }