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;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 标题
|
|
/// </summary>
|
|
// [Category("CustomProperties"), Description("标题,GroupBox 的名称"), DefaultValue("标题")]
|
|
public new string Text
|
|
{
|
|
get
|
|
{
|
|
return groupBox_Data.Text;
|
|
}
|
|
set
|
|
{
|
|
groupBox_Data.Text = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 组号
|
|
/// </summary>
|
|
public string GroupId { get; set; }
|
|
|
|
|
|
private List<ViewHeader> _viewHeaders;
|
|
/// <summary>
|
|
/// 列标题数组
|
|
/// </summary>
|
|
public List<ViewHeader> ViewHeaders
|
|
{
|
|
get
|
|
{
|
|
return _viewHeaders;
|
|
}
|
|
set
|
|
{
|
|
_viewHeaders = value;
|
|
_viewHeaders.Sort();
|
|
InitViewColumn();
|
|
}
|
|
}
|
|
|
|
|
|
private List<ViewAllRows> _viewRows;
|
|
|
|
/// <summary>
|
|
/// listView显示的数据
|
|
/// </summary>
|
|
public List<ViewAllRows> ViewRows {
|
|
get
|
|
{
|
|
return _viewRows;
|
|
}
|
|
set
|
|
{
|
|
_viewRows = value;
|
|
_viewRows.Sort();
|
|
InitViewItem();
|
|
}
|
|
}
|
|
|
|
|
|
private List<ViewAllRows> _dataAllRows;
|
|
|
|
/// <summary>
|
|
/// 所有数据的数据行
|
|
/// </summary>
|
|
public List<ViewAllRows> DataAllRows
|
|
{
|
|
get
|
|
{
|
|
return _dataAllRows;
|
|
}
|
|
set
|
|
{
|
|
_dataAllRows = value;
|
|
comboBox_StationCode_SelectedValueChanged(null,null);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public List<string> StationCodeList { get; set; }
|
|
|
|
private void InitViewColumn()
|
|
{
|
|
listView_Data.Columns.Clear();
|
|
|
|
List<ColumnHeader> columnHeaders = new List<ColumnHeader>();
|
|
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<ListViewItem> listViewItems = new List<ListViewItem>();
|
|
ListViewItem listViewItem;
|
|
List<string> ItemContent;
|
|
|
|
int serialId = 0;
|
|
|
|
_viewRows.ForEach(P=> { serialId++; P.SerialId = serialId.ToString(); });
|
|
foreach (var column in _viewRows)
|
|
{
|
|
ItemContent = new List<string>();
|
|
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 跨线程调用控件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
public void RefreshControlMulThread(Action<Control, object> 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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 同步工位号(外部调用)
|
|
/// </summary>
|
|
/// <param name="stationCode"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 工位数据读写操作
|
|
/// </summary>
|
|
/// <param name="arg1"></param>
|
|
/// <param name="arg2"></param>
|
|
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<string> tagIdList = new List<string>();
|
|
//获取所有点位
|
|
foreach (var viewRow in _viewRows)
|
|
{
|
|
|
|
tagIdList.Add(viewRow.TagId);
|
|
|
|
|
|
|
|
}
|
|
|
|
List<string> 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 事件更新listview
|
|
/// </summary>
|
|
/// <param name="TagId"></param>
|
|
/// <param name="value"></param>
|
|
public void OpcTagValueChanged(string TagId,object value,DateTime updateTime)
|
|
{
|
|
if (!_dataTagMonitor) return;
|
|
|
|
|
|
List<ViewAllRows> 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);
|
|
}
|
|
}
|
|
}
|