using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using OTS.WinFormsUI.Docking;
using System.IO;
using System.Collections;
using OTSDataType;
using OTSModelSharp;
namespace OTSMeasureApp
{
public partial class OTSMeasureResultWindow : DockContent
{
#region 全局变量
OTSIncAMeasureAppForm m_MeasureAppForm;
//进度条最大值
int m_MaxValue = 100;
//进度条最小值
int m_MinValue = 0;
//步长
int m_Step = 1;
//文件名称
private string m_fileName = string.Empty;
private bool m_resetText = true;
//国际化
OTSCommon.Language lan;
Hashtable table;
NLog.Logger log ;
#endregion
public OTSMeasureResultWindow(OTSIncAMeasureAppForm MeasureAppForm)
{
InitializeComponent();
m_MeasureAppForm = MeasureAppForm;
//国际化
lan = new OTSCommon.Language(this);
table = lan.GetNameTable(this.Name);
}
public string FileName
{
get { return m_fileName; }
set
{
if (value != string.Empty)
{
Stream s = new FileStream(value, FileMode.Open);
FileInfo efInfo = new FileInfo(value);
string fext = efInfo.Extension.ToUpper();
s.Close();
}
m_fileName = value;
this.ToolTipText = value;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (m_resetText)
{
m_resetText = false;
FileName = FileName;
}
}
protected override string GetPersistString()
{
String stName = GetType().ToString() + "," + FileName + "," + Text;
return stName;
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
if (FileName == string.Empty)
{
//this.richTextBox1.Text = Text;
return;
}
}
private void OTSMeasureResultWindow_Load(object sender, EventArgs e)
{
this.dg_Info.AutoResizeColumns();
//创建列
this.dg_Info.AutoGenerateColumns = false;
CheckForIllegalCrossThreadCalls = false;
log = NLog.LogManager.GetCurrentClassLogger();
for(int i=0;i< dg_Info.ColumnCount;i++)
{
dg_Info.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
dg_Info.RowHeadersDefaultCellStyle.Padding = new Padding(dg_Info.RowHeadersWidth);
}
private void OTSMeasureResultWindow_SizeChanged(object sender, EventArgs e)
{
//获取屏幕的宽度与高度
int width = this.Width;
int height = this.Height;
}
///
/// 设置当前进度信息(当前帧图数量 总数)
///
///
///
///
public bool SetCurrentProgressInfo(int CompleteFieldCount, int MeasureFieldTotalCount, int ParticleCount)
{
//设置进度条最大、最小、步长值
PBState.Minimum = m_MinValue;
PBState.Maximum = m_MaxValue;
PBState.Step = m_Step;
int currentProgress = m_MinValue;
int currentMeasureCountAdd = CompleteFieldCount;
//设置当前帧图数
lblFieldCount.Text = CompleteFieldCount.ToString();
if (currentMeasureCountAdd <= MeasureFieldTotalCount)
{
currentProgress = (currentMeasureCountAdd) * 100 / MeasureFieldTotalCount;
}
//设置当前进度值
if (currentProgress < 100)
{
PBState.Value = currentProgress;
lblProgressInfo.Text = currentProgress + "%";
}
else
{
lblProgressInfo.Text = currentProgress + "%";
PBState.Value = 100;
}
//设置颗粒数量
int pCount = ParticleCount;
lblParticleCount.Text = (pCount).ToString();
return false;
}
///
/// 初始化 点击主窗体中新建按钮
///
///
public bool SetInit()
{
lblSampleName.Text = string.Empty;
lblMeasureTime.Text = string.Empty;
lblParticleCount.Text = string.Empty;
lblBeginTime.Text = string.Empty;
lblFieldCount.Text = string.Empty;
lblProgressInfo.Text = "0%";
PBState.Value = 0;
dg_Info.DataSource = null;
return true;
}
#region 显示操作
///
/// 设置样品名称
///
///
public void SetSampleName(string sampleName)
{
//设置样品名称
if (sampleName != null)
{
if (sampleName != "")
{
lblSampleName.Text = sampleName;
}
}
}
///
/// 设置开始时间
///
///
public void SetStartTime(string startTime)
{
if (startTime != null)
{
if (startTime != "")
{
try
{
//设置开始时间
lblBeginTime.Text = startTime;
}
catch (Exception)
{
lblBeginTime.Text = "";
}
}
}
}
///
/// 设置结束时间
///
///
public void CloseProgressWindow()
{
//this.Dispose();
this.Close();
}
#endregion
private void OTSMeasureResultWindow_FormClosing(object sender, FormClosingEventArgs e)
{
}
#region 设置当前测量用时
///
/// 设置当前测量用时
///
/// 时间间隔对象
public void SetMeasureTime(TimeSpan ts)
{
//这样就能得到天数、小时、分差
string str1 = string.Empty;
if (ts.Days > 0)
{
string str = table["str1"].ToString();
str1 += ts.Days + str;
}
if (ts.Hours > 0)
{
string str = table["str2"].ToString();
str1 += ts.Hours + str;
}
if (ts.Minutes > 0)
{
string str = table["str3"].ToString();
str1 += ts.Minutes + str;
}
if (ts.Seconds > 0)
{
string str = table["str4"].ToString();
str1 += ts.Seconds + str;
}
//所有时间换去 总计天数、小时、分钟
lblMeasureTime.Text = str1;
}
#endregion
#region 设置当前测量列表
///
/// 设置当前测量用时
///
/// 时间间隔对象
public void SetMeasureListInfo(IList list)
{
try
{
//颗粒类型数量
int IParticleTypeAmount = 0;
//颗粒总数量
int IParticleAmount = 0;
//颗粒面积总数量
double dAreaAmount = 0;
COTSSample WSample = m_MeasureAppForm.m_ProjParam.GetWorkSample();
//list 序列化 DataTable
DataTable dt = ListConvertToDT(list);
if (dt != null)
{
if (dt.Rows.Count > 0)
{
IParticleTypeAmount = dt.Rows.Count;
string stdName = string.Empty;
for (int i = 0; i < dt.Rows.Count; i++)
{
stdName = string.Empty;
int STDID = Convert.ToInt32(dt.Rows[i]["TypeId"].ToString());
IParticleAmount += Convert.ToInt32(dt.Rows[i]["Number"].ToString());
dAreaAmount += Convert.ToDouble(dt.Rows[i]["Area"].ToString());
}
//添加统计行信息
DataRow dr = dt.NewRow();
dr["TypeId"] = "";
dr["STDName"] = "";
string str = table["str6"].ToString();
dr["Number"] = str + IParticleAmount;
str = table["str7"].ToString();
dr["Area"] = str + dAreaAmount;
dt.Rows.Add(dr);
}
dg_Info.DataSource = dt;
}
}
catch (Exception ex)
{
string str = table["str8"].ToString();
log.Trace(str + ex.ToString());
}
}
#endregion
#region List转换为DataTable
///
/// 将集合类转换成DataTable
///
/// 集合
///
public static DataTable ListConvertToDT(IList list)
{
DataTable result = new DataTable();
result.Columns.Add("TypeId");
result.Columns.Add("Number");
result.Columns.Add("Area");
result.Columns.Add("STDName");
if (list == null)
{
return null;
}
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
CMsrResultItem cMsrResultItemClr = (CMsrResultItem)list[i];
DataRow dr = result.NewRow();
dr[0] = cMsrResultItemClr.GetTypeId();
dr[1] = cMsrResultItemClr.GetNumber();
dr[2] = Math.Round(Convert.ToDouble(cMsrResultItemClr.GetArea()),2);
dr[3] = cMsrResultItemClr.GetName();
result.Rows.Add(dr);
}
}
return result;
}
#endregion
public void UpdateResultInfoBySampleName(string sampleName)
{
COTSSample sample = m_MeasureAppForm.m_ProjParam.GetResultData().GetSampleByName(sampleName);
//设置当前样品名称
SetSampleName(sampleName);
//已完成的数量
int CompleteFieldCount = sample.GetMsrStatus().GetCompletedFields();
int MeasureFieldTotalCount = (int)sample.GetMsrStatus().GetCompletedFields();
int ParticleCount = 0;
if (CompleteFieldCount > 0)
{
//设置完成数量 颗粒数量
SetCurrentProgressInfo(CompleteFieldCount, MeasureFieldTotalCount, ParticleCount);
//设置开始、测量时间
string startTime = sample.GetMsrStatus().GetStartTime().ToString();
//开始时间
SetStartTime(startTime);
TimeSpan usedTimeTS = sample.GetMsrStatus().GetUsedTime();
//获取测量时间
SetMeasureTime(usedTimeTS);
//获取结果文件 颗粒列表信息
List cMsrResultItemClrList = sample.GetMsrResults().GetResultItems();
//设置测量状态数据列表
SetMeasureListInfo(cMsrResultItemClrList);
}
else
{
SetInit();
}
}
private void PBState_SizeChanged(object sender, EventArgs e)
{
//每次在进度条尺寸更变的时候 将进度内容位置设置在进度条位置中心
lblProgressInfo.Location = new Point(PBState.Location.X + (PBState.Width), lblProgressInfo.Location.Y);
}
}
}