You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
6.2 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
namespace Mesnac.Controls.Feeding
{
[ToolboxBitmap(typeof(System.Windows.Forms.Label))]
public partial class MixingStep : Label
{
private string _dataName;
private DataTable _data;
private DataTable _cloneData; //克隆数据源
private OnOffStatuses _finishStatus;
private int _lengthMixer;
private bool _isCurrent;
private string _finishStatusName;
private string _lengthMixerName;
public MixingStep()
{
InitializeComponent();
}
public MixingStep(IContainer container)
{
container.Add(this);
InitializeComponent();
}
/// <summary>
/// 数据源动画属性
/// </summary>
public string DataName
{
get { return _dataName; }
set { _dataName = value; }
}
/// <summary>
/// 一车结束标志动画属性
/// </summary>
public string FinishStatusName
{
get { return _finishStatusName; }
set { _finishStatusName = value; }
}
/// <summary>
/// 当前步骤动画属性
/// </summary>
public string LengthMixerName
{
get { return _lengthMixerName; }
set { _lengthMixerName = value; }
}
/// <summary>
/// 数据源
/// </summary>
public DataTable Data
{
get { return _data; }
set
{
_data = value;
if (this._cloneData == null)
{
this.InitData(false);
}
}
}
public bool IsCurrent
{
get { return _isCurrent; }
set { _isCurrent = value; }
}
/// <summary>
/// 初始化数据
/// </summary>
private void InitData(bool isclear)
{
if (isclear)
{
if (this._cloneData != null)
{
this._cloneData.Dispose();
this._cloneData = null;
}
}
if (this._cloneData == null && this._data != null && this._data.Rows.Count > 0)
{
this._cloneData = new DataTable();
this._cloneData.Columns.Add("步骤", typeof(string));
this._cloneData.Columns.Add("动作", typeof(string));
int j = 1;
for (int i = 0; i < this._data.Rows.Count; i++)
{
DataRow dr = this._cloneData.NewRow();
dr["步骤"] = this._data.Rows[i]["步骤"].ToString();
dr["动作"] = this._data.Rows[i]["动作"].ToString();
if (i + 1 == this._data.Rows.Count)
{
dr["步骤"] = j;
this._cloneData.Rows.Add(dr);
continue;
}
if (this._data.Rows[i + 1]["条件"].ToString().Trim() == "同时执行")
{
continue;
}
dr["步骤"] = j;
this._cloneData.Rows.Add(dr);
j++;
}
}
}
/// <summary>
/// 当前步骤
/// </summary>
public int LengthMixer
{
get { return _lengthMixer; }
set
{
_lengthMixer = value;
if (this._cloneData != null)
{
if (this._cloneData.Columns.Contains("步骤") && this._cloneData.Columns.Contains("动作"))
{
if (this._cloneData.Rows.Count > 0)
{
for (int i = 0; i < this._cloneData.Rows.Count; i++)
{
DataRow row = this._cloneData.Rows[i];
object val = row["步骤"];
if (val != DBNull.Value)
{
if (Convert.ToInt32(val) == this._lengthMixer)
{
if (IsCurrent)
this.Text = row["动作"].ToString();
else
{
if ((i + 1) == this._cloneData.Rows.Count)
this.Text = "";
else
this.Text = this._cloneData.Rows[i + 1]["动作"].ToString();
}
break;
}
}
}
if (!IsCurrent && _lengthMixer == 0)
{
this.Text = this._cloneData.Rows[0]["动作"].ToString();
}
}
}
}
}
}
/// <summary>
/// 一车结束标志
/// </summary>
public OnOffStatuses FinishStatus
{
get { return _finishStatus; }
set
{
if ((int)value > 1)
{
this._finishStatus = OnOffStatuses.On;
}
else if ((int)value < 0)
{
this._finishStatus = OnOffStatuses.Off;
}
else
{
this._finishStatus = value;
}
//如果一车标志结束,则重新绑定数据源
if (this._finishStatus == OnOffStatuses.On)
{
this.InitData(true);
}
}
}
}
}