using DataMirrorTools; using DTTest; using HZ.Common; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; /// /// /// namespace DataMirrorToolsPage { /// /// /// public partial class P_SignalViewer : ModelManagement { int currenIndex = 0; /// /// Tag处理 /// // public static TagID_Add_Handler tagID_Add_Handler = null; /// /// 当前的TagID /// string currTagID = ""; /// /// 当前的TagName /// string currTagName = ""; /// /// 初始化函数 /// public P_SignalViewer() { InitializeComponent(); ControlDoubleBuffered(dgv_SignalViewer); } /// /// 创建信号点 /// /// /// private void btn_Signal_Create_Click(object sender, EventArgs e) { SqlOperation.SqlSignalTree.CreateSignal("", PP.ProjectCode,Type_Device.Signal); Refresh_SignalViewer(); if (this.dgv_SignalViewer.Rows.Count > 0) { this.dgv_SignalViewer.Rows[this.dgv_SignalViewer.Rows.Count-1].Selected = true; } // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("信号添加完成!"); } private void Refresh_SignalViewer() { var selectSignalName = txt_SelectSignalName.Text.Trim(); var dt_Signal = SqlOperation.SqlSignalTree.SelectSignal_UseSignalName(selectSignalName, false, PP.ProjectCode); currSignalCount = dt_Signal.Rows.Count; label_SignalCount.Text = $"{currSignalCount} 个信号"; dgv_SignalViewer.DataSource = dt_Signal; Rendering_dgv_Handler(); } /// /// 退出事件 /// /// /// private void P_SignalViewer_FormClosing(object sender, FormClosingEventArgs e) { // Program.simplifyPdps.UpdateCheckedState_TSM_SignalViewer( 1 == 2 ); //if (!SimplifyPdps.isCanClose) //{ // e.Cancel = true;//拦截,不响应操作 //} } /// /// 删除信号按钮 /// /// /// private void btn_Signal_Delete_Click(object sender, EventArgs e) { if (MessageBox.Show("确认删除选中信号【" + currTagName + "】?", "删除确认?", MessageBoxButtons.YesNo) == DialogResult.Yes) { } else { // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("已取消删除信号操作!"); return; } SqlOperation.SqlSignalTree.DeleteSignal(currGridSequenceNo, currTagID, PP.ProjectCode); Refresh_SignalViewer(); } /// /// 编辑完成事件 /// /// /// private void dgv_SignalViewer_CellEndEdit(object sender, DataGridViewCellEventArgs e) { var checkedThis = Convert.ToBoolean(GetObjV(e, "选择")); var tagID = GetObjV(e, "DeviceCode").ToString(); var memory = Convert.ToBoolean(GetObjV(e, "内存")); var type = GetObjV(e, "类型").ToString(); var robotSignalName = GetObjV(e, "机器人信号名称").ToString(); var robotAddress = GetObjV(e, "机器人信号地址").ToString(); var address = GetObjV(e, "地址").ToString(); var iecFormat = GetObjV(e, "IEC格式").ToString(); var isEnable = Convert.ToBoolean(GetObjV(e, "启用")); var sName = GetObjV(e, "信号名称").ToString(); var explain = GetObjV(e, "注释").ToString(); var isMonitorStr = GetObjV(e, "监控").ToString(); var isMonitor = true; switch (isMonitorStr) { case "1": case "True": case "TRUE": case "true": isMonitor = true; break; default: isMonitor = false; break; } SqlOperation.SqlSignalTree.UpdateSignal(tagID, checkedThis, memory, type, robotSignalName, robotAddress, address, isEnable, sName, explain, isMonitor, PP.ProjectCode); } private object GetObjV(DataGridViewCellEventArgs e, string Name) { return dgv_SignalViewer.Rows[e.RowIndex].Cells[Name].Value; } /// /// 点击事件 /// /// /// private void dgv_SignalViewer_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex > -1) { try { currTagID = GetObjV(e, "DeviceCode").ToString(); currTagName = GetObjV(e, "信号名称").ToString(); var region = GetObjV(e, "Region").ToString(); currGridSequenceNo = Convert.ToInt32(GetObjV(e, "序号").ToString()); var ResourcesCode = GetObjV(e, "资源").ToString(); RefreshCurrSequenceNo(currGridSequenceNo); //if (tagID_Add_Handler != null) //{ // tagID_Add_Handler.ExecCurrSelectSignal(currTagID, currTagName, ResourcesCode); //} if (GlobalEventInterface.E_DeviceSignalSimGantt_TransmitTagToDeviceSignalSim != null) { GlobalEventInterface.E_DeviceSignalSimGantt_TransmitTagToDeviceSignalSim(currTagID, currTagName); } if (GlobalEventInterface.E_SignalLabelForm_TransmitSelect != null) { GlobalEventInterface.E_SignalLabelForm_TransmitSelect(Cmd_Frame.SignalWrite, currTagID, currTagName); } if (GlobalEventInterface.E_LogicalBlock_AddSignal != null) { GlobalEventInterface.E_LogicalBlock_AddSignal(new LogicalBlock.LB_Device_Signal() { SignalCode = currTagID, SignalName = currTagName, SignalRegion = region, }); } } catch (Exception err) { LogNet.LogisTrac.WriteLog(typeof(P_SignalViewer), err); Console.WriteLine(err); } } } /// /// 信号导入按钮 /// /// /// private void btn_Signal_Import_Excel_Click(object sender, EventArgs e) { MessageBox.Show("暂时禁用!!——2021.11.18"); return; if (MessageBox.Show($"确认导入信号表?", "导入确认", MessageBoxButtons.YesNo) == DialogResult.Yes) { } else { //MessageBox.Show("您已取消导入信号表操作!"); return; } var importOpenFileDialog = new OpenFileDialog(); var importDialogResult = importOpenFileDialog.ShowDialog(); var localFilePath = importOpenFileDialog.FileName; if (importDialogResult == DialogResult.OK) { var t1 = DateTime.Now.ToFileTimeUtc(); DataTable dt_Signal = OExcel.ExeclHelper_Model.ExcelToDataTable(localFilePath, "MES_基本变量原始数据", true); var t2 = DateTime.Now.ToFileTimeUtc(); var D1 = ((t2 - t1) / 10000).ToString(); ImportSignalToSql(dt_Signal); var t3 = DateTime.Now.ToFileTimeUtc(); var D2 = ((t3 - t2) / 10000).ToString(); MessageBox.Show("信号表文件导入成功!\n" + "读取耗时:" + D1 + " ms\n" + "转换存储耗时:" + D2 + " ms\n"); Refresh_SignalViewer(); } //else //{ // MessageBox.Show("您已取消了信号导入操作!"); //} } public void ImportSignalToSql(DataTable dt) { for (int i = 0; i < dt.Rows.Count; i++) { //信号名 是内存 数据类型 机器人信号名 地址 是连接PLC 外部连接 资源 解释 项目代码 //[signalName],[Memory],[Type],[RobotSignalName],[Address],[启用], ************** ,[Resources],[Explain],[ProjectCode] var signalName = dt.Rows[i]["TagID"].ToString(); var tagID = Convert.ToInt32(signalName); if (tagID < 41010001) { var memory = false; var type = dt.Rows[i]["变量类型"].ToString(); var robotSignalName = "无"; var address = dt.Rows[i]["变量地址"].ToString() + dt.Rows[i]["变量其它"].ToString(); var iecFormat = dt.Rows[i]["DbName"].ToString(); var isEnable = true; var resources = "Excel导入"; var explain = dt.Rows[i]["测量项目"].ToString(); SqlOperation.SqlSignalTree.AddOrUpdateSignal(signalName, memory, type, robotSignalName, address, iecFormat, isEnable, resources, explain, PP.ProjectCode); } } } /// /// 信号导出按钮 /// /// /// private void btn_Signal_Export_Excel_Click(object sender, EventArgs e) { var exportOpenFileDialog = new SaveFileDialog(); //设置文件类型 exportOpenFileDialog.Filter = "Microsoft Excel(*.xls)|*.xls"; //设置默认文件类型显示顺序 exportOpenFileDialog.FilterIndex = 1; //保存对话框是否记忆上次打开的目录 exportOpenFileDialog.RestoreDirectory = true; var exportDialogResult = exportOpenFileDialog.ShowDialog(); //点了保存按钮进入 if (exportDialogResult == DialogResult.OK) { var localFilePath = exportOpenFileDialog.FileName;//获得文件路径 var fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //获取文件名,不带路径 var fileExtension = localFilePath.Substring(localFilePath.LastIndexOf(".") + 1); //获取文件扩展名 var fileExtensionToLower = fileExtension.ToLower(); var dt_SignalViewer = SqlOperation.SqlSignalTree.SelectSignal_UseSignalName("", false, PP.ProjectCode); var col = dt_SignalViewer.Columns; if (col.Contains("Checked")) col.Remove("Checked"); if (col.Contains("Memory")) col.Remove("Memory"); if (col.Contains("RobotSignalName")) col.Remove("RobotSignalName"); if (col.Contains("IsEnable")) col.Remove("IsEnable"); var success = OExcel.ExeclHelper_Model.DataTableToExcel(dt_SignalViewer, "SignalViewer", localFilePath); if (success == false) { // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("项目数据导出Excel【错误】"); return; } } //else //{ // MessageBox.Show("您已取消了导出数据操作!"); //} } private void btn_Signal_Import_S7_Click(object sender, EventArgs e) { } #region 显示缓存2021.3.31 private void ControlDoubleBuffered(Control c) { //设置双缓冲,解决datagridview显示数据缓慢 Type type = c.GetType(); System.Reflection.PropertyInfo pi = type.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); pi.SetValue(c, true, null); } #endregion private void btn_MoveUp_Click(object sender, EventArgs e) { if (operationing) { operationing = false; if (currGridSequenceNo >= 2) { this.dgv_SignalViewer.Rows[currGridSequenceNo - 1].Selected = false; SqlOperation.SqlSignalTree.MoveUpSignal(currGridSequenceNo, PP.ProjectCode); Refresh_SignalViewer(); currGridSequenceNo--; RefreshCurrSequenceNo(currGridSequenceNo); this.dgv_SignalViewer.Rows[currGridSequenceNo - 1].Selected = true; dgv_SignalViewer_CellClick(dgv_SignalViewer, new DataGridViewCellEventArgs(0, currGridSequenceNo - 1)); //dgv_SignalViewer_CellClick(dgv_SignalViewer, new DataGridViewCellEventArgs(dgv_SignalViewer.SelectedCells[0].ColumnIndex, dgv_SignalViewer.SelectedCells[currGridSequenceNo - 1].RowIndex)); } else { // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("已经是第一个工序,不能再移动了!"); } operationing = true; } } private void btn_MoveDown_Click(object sender, EventArgs e) { if (operationing) { operationing = false; if (currGridSequenceNo < currSignalCount) { this.dgv_SignalViewer.Rows[currGridSequenceNo - 1].Selected = false; SqlOperation.SqlSignalTree.MoveDownSignal(currGridSequenceNo, PP.ProjectCode); Refresh_SignalViewer(); currGridSequenceNo++; RefreshCurrSequenceNo(currGridSequenceNo); this.dgv_SignalViewer.Rows[currGridSequenceNo - 1].Selected = true; dgv_SignalViewer_CellClick(dgv_SignalViewer, new DataGridViewCellEventArgs(0, currGridSequenceNo - 1)); //dgv_SignalViewer_CellClick(dgv_SignalViewer, new DataGridViewCellEventArgs(dgv_SignalViewer.SelectedCells[0].ColumnIndex, dgv_SignalViewer.SelectedCells[currGridSequenceNo - 1].RowIndex)); } else { // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("已经是最后一个工序,不能再移动了!"); } operationing = true; } } /// /// 操作中 /// bool operationing = true; /// /// 当前选中的工序排序 /// public static int currGridSequenceNo = -1; /// /// 信号数量 /// int currSignalCount = 0; private void RefreshCurrSequenceNo(int sequenceNo) { txt_CurrSequenceNo.Text = sequenceNo.ToString(); } private void btn_AutoGenerateSignalTag_Click(object sender, EventArgs e) { } DelayAction delayAction1 = new DelayAction(); private void txt_SelectSignalName_TextChanged(object sender, EventArgs e) { delayAction1.Delay(750, dgv_SignalViewer, SelectTask); } private void SelectTask() { Refresh_SignalViewer(); } public void Rendering_dgv_Handler() { var tagIDList = SqlOperation.SqlTag_Handler.SelectDistinctTagID_Handler( PP.ProjectCode); Rendering_dgv(tagIDList, Color.GreenYellow); } private void Rendering_dgv(List tagIDList, Color c) { if (dgv_SignalViewer.CurrentRow == null) return; currenIndex = dgv_SignalViewer.CurrentRow.Index; DataGridView dgv = this.dgv_SignalViewer; if (!dgv.Columns.Contains("DeviceCode")) { return; } for (int k = 0; k < dgv.RowCount; k++) { for (int cl = 0; cl < dgv.ColumnCount; cl++) dgv.Invoke(new Action(delegate () { dgv.Rows[k].Cells[cl].Style.BackColor = Color.White; })); } foreach (string thisTagID in tagIDList) { for (int j = 0; j < dgv.RowCount; j++) { if (dgv.Rows[j].Cells["DeviceCode"].Value.ToString().Trim() == thisTagID) { for (int cl = 0; cl < dgv.ColumnCount; cl++) dgv.Invoke(new Action(delegate () { dgv.Rows[j].Cells[cl].Style.BackColor = c; })); } } } if(this.dgv_SignalViewer.Rows.Count> currenIndex) { this.dgv_SignalViewer.Rows[currenIndex].Selected = true; } } #region 调试信号查询2021.10.8.LLX /// /// 行为查找TagID /// 2021.5.11 /// /// public void ActSelect_TagID_Handler(string actCode) { var tagIDList = SqlOperation.SqlTag_Handler.SelectTagID_Handler(actCode, Type_TagIDHandler.Craft, PP.ProjectCode); Rendering_dgv(tagIDList, Color.Red); } public void ModelSelect_SignalTagID(string modelCode) { var tagIDList = SqlOperation.SqlTag_Handler.ModelSelect_SignalTagID(modelCode, PP.ProjectCode); Rendering_dgv(tagIDList, Color.Red); } /// /// 行为对应的查找TagID /// 2021.5.11 /// /// public void TagIDSelect_TagID_Handler(string tagID) { var tagIDList = new List() { tagID }; Rendering_dgv(tagIDList, Color.Red); } #endregion /// /// 信号处理编辑器 /// 2021.10.8.LLX /// /// /// private void btn_SignalHandlerEditor_Click(object sender, EventArgs e) { //if (tagID_Add_Handler != null) //{ // tagID_Add_Handler.Close(); // tagID_Add_Handler = null; //} //tagID_Add_Handler = new TagID_Add_Handler(); //tagID_Add_Handler.Show(this); } private void P_SignalViewer_Load(object sender, EventArgs e) { Refresh_SignalViewer(); GlobalEventInterface.E_SignalViewer_ActSelect_TagID_Handler -= GlobalEventInterface_E_SignalViewer_ActSelect_TagID_Handler; GlobalEventInterface.E_SignalViewer_ActSelect_TagID_Handler += GlobalEventInterface_E_SignalViewer_ActSelect_TagID_Handler; GlobalEventInterface.E_SignalViewer_TagIDSelect_TagID_Handler -= GlobalEventInterface_E_SignalViewer_TagIDSelect_TagID_Handler; GlobalEventInterface.E_SignalViewer_TagIDSelect_TagID_Handler += GlobalEventInterface_E_SignalViewer_TagIDSelect_TagID_Handler; GlobalEventInterface.E_SignalViewer_Rendering_dgv_Handler -= GlobalEventInterface_E_SignalViewer_Rendering_dgv_Handler; GlobalEventInterface.E_SignalViewer_Rendering_dgv_Handler += GlobalEventInterface_E_SignalViewer_Rendering_dgv_Handler; } private void GlobalEventInterface_E_SignalViewer_Rendering_dgv_Handler() { Rendering_dgv_Handler(); } private void GlobalEventInterface_E_SignalViewer_ActSelect_TagID_Handler(string actCode) { ActSelect_TagID_Handler(actCode); } private void GlobalEventInterface_E_SignalViewer_TagIDSelect_TagID_Handler(string tagID) { TagIDSelect_TagID_Handler(tagID); } private List GetDgvSelectedRows(DataGridView dgv) { var list = new List(); foreach (DataGridViewRow row in dgv.SelectedRows) list.Insert(0, row.Cells["DeviceCode"].Value.ToString()); return list; } private Dictionary GetDgvSelectedRows_TagID_SequenceNo(DataGridView dgv) { var dc = new Dictionary(); foreach (DataGridViewRow row in dgv.SelectedRows) dc.Add(row.Cells["DeviceCode"].Value.ToString(), Convert.ToInt32(row.Cells["序号"].Value.ToString())); return dc; } private void TSM_UpdateSignalConnect_Click(object sender, EventArgs e) { var connectSelect = new ConnectSelect(); var result = connectSelect.ShowDialog(); if (result == DialogResult.OK) { var connectCode = connectSelect.connCode; if (connectCode.Length > 1) { foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSimSignal_Connect(tagID, connectCode, PP.ProjectCode); } } } Refresh_SignalViewer(); } private void TSM_DeleteSignalConnect_Click(object sender, EventArgs e) { var connectCode = ""; foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSimSignal_Connect(tagID, connectCode, PP.ProjectCode); } Refresh_SignalViewer(); } private void TSM_SignalViewer_Add_Click(object sender, EventArgs e) { foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSignalChecked(tagID, true, PP.ProjectCode); } Refresh_SignalViewer(); } private void TSM_SignalViewer_Remove_Click(object sender, EventArgs e) { foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSignalChecked(tagID, false, PP.ProjectCode); } Refresh_SignalViewer(); } private void TSM_Delete_SelectRaws_Click(object sender, EventArgs e) { // MessageBox.Show("存在排序问题,暂时还未开发!"); foreach (KeyValuePair TagID_SequenceNo in GetDgvSelectedRows_TagID_SequenceNo(dgv_SignalViewer)) { var tagID = TagID_SequenceNo.Key; var sequenceNo = TagID_SequenceNo.Value; SqlOperation.SqlSignalTree.DeleteSignal(sequenceNo, tagID, PP.ProjectCode); } Refresh_SignalViewer(); } private void btn_btn_Refresh_Click(object sender, EventArgs e) { Refresh_SignalViewer(); } private void TSM_UpdateSignalRegion_Click(object sender, EventArgs e) { var signalRegion = new SignalRegion(); var result = signalRegion.ShowDialog(); if (result == DialogResult.OK) { var region = signalRegion.region; foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSignalRegion(tagID, region, PP.ProjectCode); } Refresh_SignalViewer(); } } private void tsmi_INT16_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.INT16); } private void tsmi_INT32_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.INT32); } private void tsmi_FLOAT_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.FLOAT); } private void tsmi_UINT64_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.UINT64); } private void tsmi_STRING_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.STRING); } private void tsmi_BOOL_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.BOOL); } private void tsmi_BYTE_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.BYTE); } private void tsmi_UINT16_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.UINT16); } private void tsmi_DOUBLE_Click(object sender, EventArgs e) { UpdateSignalType(Type_Signal_Raw.DOUBLE); } private void UpdateSignalType(Type_Signal_Raw signalType) { foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSignal_DataType(tagID, signalType.ToString(), PP.ProjectCode); } Refresh_SignalViewer(); } private void dgv_SignalViewer_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex > -1) { var col = dgv_SignalViewer.Columns[e.ColumnIndex]; if (col is DataGridViewButtonColumn) { var DeviceCode = dgv_SignalViewer.Rows[e.RowIndex].Cells["DeviceCode"].Value.ToString(); CMS_SignalType.Show(Cursor.Position); } } } private void btn_OutScadaTable_Click(object sender, EventArgs e) { var exportOpenFileDialog = new SaveFileDialog(); //设置文件类型 exportOpenFileDialog.Filter = "Microsoft Excel(*.xls)|*.xls"; //设置默认文件类型显示顺序 exportOpenFileDialog.FilterIndex = 1; //保存对话框是否记忆上次打开的目录 exportOpenFileDialog.RestoreDirectory = true; var exportDialogResult = exportOpenFileDialog.ShowDialog(); //点了保存按钮进入 if (exportDialogResult == DialogResult.OK) { var localFilePath = exportOpenFileDialog.FileName;//获得文件路径 var fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //获取文件名,不带路径 var fileExtension = localFilePath.Substring(localFilePath.LastIndexOf(".") + 1); //获取文件扩展名 var fileExtensionToLower = fileExtension.ToLower(); GetSignalTable(out DataTable dt_Signal, out DataTable dt_Device); dt_Signal.TableName = "MES_基本变量原始数据"; dt_Device.TableName = "设备类型对应表"; DataSet outDataSet = new DataSet(); outDataSet.Tables.Add(dt_Signal); outDataSet.Tables.Add(dt_Device); var success = OExcel.ExeclHelper_Model.DataSetToExcel(outDataSet, localFilePath); if (success == false) { // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("信号表数据导出Excel【错误】!!"); return; } } //else //{ // MessageBox.Show("您已取消了导出数据操作!"); //} } private void P_SignalViewer_FormClosed(object sender, FormClosedEventArgs e) { GlobalEventInterface.E_SignalViewer_ActSelect_TagID_Handler -= GlobalEventInterface_E_SignalViewer_ActSelect_TagID_Handler; GlobalEventInterface.E_SignalViewer_TagIDSelect_TagID_Handler -= GlobalEventInterface_E_SignalViewer_TagIDSelect_TagID_Handler; GlobalEventInterface.E_SignalViewer_Rendering_dgv_Handler -= GlobalEventInterface_E_SignalViewer_Rendering_dgv_Handler; } private void TSM_UpdateResources_Click(object sender, EventArgs e) { var updateResources = new UpdateResources(); updateResources.Show(this); new TaskFactory().StartNew(delegate () { while (updateResources.IsOpen) { System.Threading.Thread.Sleep(100); } foreach (string tagID in GetDgvSelectedRows(dgv_SignalViewer)) { SqlOperation.SqlSignalTree.UpdateSignalResources(tagID, PP.ModelCode, PP.ProjectCode); } Refresh_SignalViewer(); }); } private void TSM_UpdateSignalDataType_Click(object sender, EventArgs e) { CMS_SignalType.Show(Cursor.Position); } private void btn_SignalRobot_Create_Click(object sender, EventArgs e) { SqlOperation.SqlSignalTree.CreateSignal("", PP.ProjectCode, Type_Device.SignalRobot); Refresh_SignalViewer(); if (this.dgv_SignalViewer.Rows.Count > 0) { this.dgv_SignalViewer.Rows[this.dgv_SignalViewer.Rows.Count - 1].Selected = true; } // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("信号添加完成!"); } } }