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);
}
}
}