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 UserControlLib { public partial class StationDataView : UserControl { public StationDataView() { InitializeComponent(); userReadOrWrite_DataOperate.UserReadOrWriteHandleEvent += UserReadOrWrite_DataOperate_UserReadOrWriteHandleEvent; userReadOrWrite_DataOperate.DataMonitorEvent += UserReadOrWrite_DataOperate_DataMonitorEvent; userReadOrWrite_DataOperate.GroupId = this.GroupId; } /// /// 标题 /// // [Category("CustomProperties"), Description("标题,GroupBox 的名称"), DefaultValue("标题")] public new string Text { get { return groupBox_Data.Text; } set { groupBox_Data.Text = value; } } /// /// 组号 /// public string GroupId { get; set; } private List _viewHeaders; /// /// 列标题数组 /// public List ViewHeaders { get { return _viewHeaders; } set { _viewHeaders = value; _viewHeaders.Sort(); InitViewColumn(); } } private List _viewRows; /// /// listView显示的数据 /// public List ViewRows { get { return _viewRows; } set { _viewRows = value; _viewRows.Sort(); InitViewItem(); } } private List _dataAllRows; /// /// 所有数据的数据行 /// public List DataAllRows { get { return _dataAllRows; } set { _dataAllRows = value; comboBox_StationCode_SelectedValueChanged(null,null); } } public List StationCodeList { get; set; } private void InitViewColumn() { listView_Data.Columns.Clear(); List columnHeaders = new List(); ColumnHeader columnHeader; foreach (var item in ViewHeaders) { columnHeader = new ColumnHeader(); columnHeader.Text = item.Text; columnHeader.Width = item.Width; columnHeader.DisplayIndex = item.Index; columnHeader.Name = item.Name; columnHeader.Tag = item.HeaderType; columnHeaders.Add(columnHeader); } listView_Data.Columns.AddRange(columnHeaders.ToArray()); } int _valueIndex; int _typeIndex; int _tagIdIndex; int _tagTimeIndex; bool _dataTagMonitor; private void InitViewItem() { listView_Data.Items.Clear(); List listViewItems = new List(); ListViewItem listViewItem; List ItemContent; int serialId = 0; _viewRows.ForEach(P=> { serialId++; P.SerialId = serialId.ToString(); }); foreach (var column in _viewRows) { ItemContent = new List(); foreach (var item in column.ViewItems) { ItemContent.Add(item.Text); } listViewItem = new ListViewItem(ItemContent.ToArray()); listViewItems.Add(listViewItem); } listView_Data.Items.AddRange(listViewItems.ToArray()); _valueIndex = ViewHeaders.Where(p => p.HeaderType == 1).ToList()[0].Index; _typeIndex = ViewHeaders.Where(p => p.HeaderType == 2).ToList()[0].Index; _tagIdIndex = ViewHeaders.Where(p => p.HeaderType == 3).ToList()[0].Index; _tagTimeIndex = ViewHeaders.Where(p => p.HeaderType == 4).ToList()[0].Index; } /// /// 跨线程调用控件 /// /// /// public void RefreshControlMulThread(Action action, Control ctrl, object obj) { this.Invoke(action, ctrl, obj); } private void checkBox_StationCodeContact_CheckedChanged(object sender, EventArgs e) { if (checkBox_StationCodeContact.Checked) { comboBox_StationCode.Enabled = false; comboBox_StationCode.Items.Clear(); comboBox_StationCode.DropDownStyle = ComboBoxStyle.DropDown; } else { comboBox_StationCode.Enabled = true; comboBox_StationCode.Items.AddRange(StationCodeList.ToArray()); comboBox_StationCode.DropDownStyle = ComboBoxStyle.DropDownList; } } /// /// 同步工位号(外部调用) /// /// public void StationCodeSync(string stationCode) { if (checkBox_StationCodeContact.Checked) { comboBox_StationCode.Text = stationCode; comboBox_StationCode_SelectedValueChanged(null, null); } } private void comboBox_StationCode_SelectedValueChanged(object sender, EventArgs e) { ViewRows = _dataAllRows.Where(p => p.StationCode == comboBox_StationCode.Text).ToList(); } /// /// 工位数据读写操作 /// /// /// private void UserReadOrWrite_DataOperate_UserReadOrWriteHandleEvent(int operateTag, string groupId) { //写入数据 if (operateTag == 0) { //弹出写入值窗体 必须选择行 if(listView_Data.SelectedItems.Count==0) { MessageBox.Show("请选择需要操作的数据。"); } else { string tagId = listView_Data.SelectedItems[0].SubItems[_tagIdIndex].ToString(); string type = listView_Data.SelectedItems[0].SubItems[_typeIndex].ToString(); string value= listView_Data.SelectedItems[0].SubItems[_valueIndex].ToString(); WriteTagValue writeTagValue = new WriteTagValue(tagId,type, value); writeTagValue.ShowDialog(); } } //读取数据 else if(operateTag == 1) { List tagIdList = new List(); //获取所有点位 foreach (var viewRow in _viewRows) { tagIdList.Add(viewRow.TagId); } List tagValueList= UserControlFrame.UserControlReadArrayDel?.Invoke(tagIdList); //可能需要多线程 if(tagValueList!=null) { for (int i = 0; i < _viewRows.Count; i++) { _viewRows[i].ViewItems[_valueIndex].Text = tagValueList[i]; listView_Data.Items[i].SubItems[_valueIndex].Text= tagValueList[i]; } } } } private void UserReadOrWrite_DataOperate_DataMonitorEvent(bool obj) { _dataTagMonitor = obj; } /// /// 事件更新listview /// /// /// public void OpcTagValueChanged(string TagId,object value,DateTime updateTime) { if (!_dataTagMonitor) return; List rows = _viewRows.Where(p => p.TagId == TagId).ToList(); if (rows.Count>0) { int index =Convert.ToInt32( rows[0].SerialId)-1; rows[0].ViewItems[_valueIndex].Text= value.ToString(); rows[0].ViewItems[_tagTimeIndex].Text = updateTime.ToString(); listView_Data.Items[index].SubItems[_valueIndex].Text = value.ToString(); listView_Data.Items[index].SubItems[_tagTimeIndex].Text = updateTime.ToString(); } } private void StationDataView_Load(object sender, EventArgs e) { listView_Data.Height = groupBox_Data.Height - 62; listView_Data.Location = new Point(3, 59); } private void StationDataView_SizeChanged(object sender, EventArgs e) { listView_Data.Height = groupBox_Data.Height - 62; listView_Data.Location = new Point(3, 59); } } }