using OTSIncAReportApp;
using OTSIncAReportApp.DataOperation.DataAccess;
using OTSCommon.Model;
using OTSIncAReportApp.OTSSampleReportInfo;
using OTSIncAReportApp.SysMgrTools;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
namespace OTSIncAReportGrids
{
public partial class ResultGrid : UserControl
{
#region 变量定义
//测量结果
frmReportApp m_frmReportApp = null;
//国际化
Language lan;
public Hashtable table;
frmReportConditionChoose m_condition;
#endregion
#region 窗体加载及构造函数
public ResultGrid(frmReportApp frmReportApp)
{
m_frmReportApp = frmReportApp;
m_condition = frmReportApp.m_conditionChoose;
InitializeComponent();
//国际化
lan = new Language(this);
table = lan.GetNameTable(this.Name);
}
private void ResultGrid_Load(object sender, EventArgs e)
{
BindGrid();
SetDataGridViewStyleIncLib();
}
#endregion
#region 绑定数据
private void BindGrid()
{
string str1 = table["str1"].ToString();
string str8 = table["str8"].ToString();
Gview_gz.Rows.Clear();
Gview_gz.Columns.Clear();
//创建列
Gview_gz.Columns.Add(str1, str1);
Gview_gz.Columns.Add(str8, str8);
//自适应列宽
if (this.Width > 0)
{
//再对不同的列宽度进行设置
Gview_gz.Columns[0].Width = this.Width / 2;
Gview_gz.Columns[1].Width = this.Width / 2;
}
//先设置一下头的高度,否则会太矮不好看
Gview_gz.ColumnHeadersVisible = false;
Gview_gz.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
Gview_gz.ColumnHeadersHeight = 30;
//int idx = m_frmReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_frmReportApp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
//string sou = m_frmReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString();
string sou = m_condition.m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE].itemDisplayVal.ToString();
//string sou= m_frmReportApp.m_conditionChoose.m_SourceGridData.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE).ToString();
if (sou.Contains("+"))
{
for (int i = 0; i < sou.Split('+').Length; i++)
{
ResultFile resultFile = m_frmReportApp.m_rstDataMgr.ResultFilesList.Find(s => s.FileName == sou.Split('+')[i]);
if (resultFile != null)
{
addGrid(resultFile);
}
}
}
else
{
for (int i=0;i< m_frmReportApp.m_rstDataMgr.ResultFilesList.Count;i++)
{
if(sou== m_frmReportApp.m_rstDataMgr.ResultFilesList[i].FileName.ToString())
addGrid(m_frmReportApp.m_rstDataMgr.ResultFilesList[i]);
}
//int item= (int)m_frmReportApp.m_conditionChoose.m_SourceGridData.GetPropItemDisplayValueByPropItem(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
//m_frmReportApp.m_rstDataMgr.SetWorkingResult(item);
//addGrid(m_frmReportApp.m_rstDataMgr.ResultFilesList[m_frmReportApp.m_rstDataMgr.GetWorkingResult()]);
}
}
///
/// 获取测量结果概况信息数据
///
///
public Dictionary GetData_ResultGrid(ResultFile resultFile)
{
ResultFile resfile = resultFile;
Dictionary keyValues = new Dictionary() { };
keyValues.Add(table["col1"].ToString(), resfile.FileName);
string path = resfile.FilePath;
FieldData fielddata = new FieldData(path);
DataTable dt = fielddata.GetGeneralInfo();
DateTime star = new DateTime();
DateTime end = new DateTime();
System.Globalization.DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();
dtFormat.ShortDatePattern = "dd/MM/yyyy hh:mm:ss";
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["name"].ToString() == "TimeStart")
{
star = Convert.ToDateTime(dt.Rows[i]["value"], dtFormat);
}
if (dt.Rows[i]["name"].ToString() == "TimeEnd")
{
end = Convert.ToDateTime(dt.Rows[i]["value"], dtFormat);
}
}
}
TimeSpan timeSpan = end - star;
int filedCount = fielddata.GetFiledCount();
Dictionary sampleMembers = ((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"]);
Dictionary semDataMsr = (Dictionary)sampleMembers["SEMDataMsr"];
double scanFieldSize = Convert.ToDouble(semDataMsr["ScanFieldSize"]);
Dictionary imageScanParam = (Dictionary)((Dictionary)((Dictionary)sampleMembers["MsrParams"])["Members"])["ImageScanParam"];
string ImageResolution = imageScanParam["ImageResolution"].ToString();
double wide = Convert.ToDouble(ImageResolution.Split('_')[1]);
double high = Convert.ToDouble(ImageResolution.Split('_')[2]);
double pixelSize = scanFieldSize / wide;
double filedsArea = Math.Round(high * wide * pixelSize* pixelSize* filedCount, 2);
int particleArea = fielddata.GetparticleArea();
double ratio = particleArea / filedsArea;
int ScanFieldSize100 = Convert.ToInt32(((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["SEMDataMsr"])["ScanFieldSize100"].ToString());
int ScanFieldSize = Convert.ToInt32(((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["SEMDataMsr"])["ScanFieldSize"].ToString());
double Magnification = ScanFieldSize100 * 100 / ScanFieldSize;
//报告参数文件
string xmlpath = Application.StartupPath + m_frmReportApp.m_OTSReportMgrParamFile;
DataSet ds = XMLoperate.GetXmlData(xmlpath, "XMLData");
DataTable dt1 = ds.Tables["Member"];
string sizestr = "1000";
for (int i = 0; i < dt1.Rows.Count; i++)
{
if (dt1.Rows[i]["RegName"].ToString() == "Scale")
{
sizestr = dt1.Rows[i]["strValue"].ToString();
break;
}
}
keyValues.Add(table["col2"].ToString(), star.ToString("yyyy-MM-dd HH:mm:ss"));
keyValues.Add(table["col3"].ToString(), end.ToString("yyyy-MM-dd HH:mm:ss"));
keyValues.Add(table["col4"].ToString(), Math.Round(timeSpan.TotalMinutes, 2).ToString() + "mins");
keyValues.Add(table["col5"].ToString(), filedCount.ToString());
keyValues.Add(table["col12"].ToString(), Math.Round(Magnification, 2).ToString());
string LibraryName = "";
if ("NoSTDDB"== ((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString())
{
LibraryName = "OTSIncASysSTD";
}
else
{
LibraryName = ((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString();
}
keyValues.Add(table["col6"].ToString(), LibraryName);
keyValues.Add(table["col7"].ToString(), fielddata.GetparticleCount().ToString());
keyValues.Add(table["col8"].ToString(), filedsArea.ToString());
keyValues.Add(table["col9"].ToString(), particleArea.ToString());
keyValues.Add(table["col10"].ToString(), ratio.ToString());
keyValues.Add(table["col11"].ToString(), sizestr);
return keyValues;
}
public Dictionary GetData_ResultGrid_Report()
{
ResultFile resfile = m_frmReportApp.m_rstDataMgr.ResultFilesList[m_frmReportApp.m_rstDataMgr.getSelectedIndex()];
Dictionary keyValues = new Dictionary() { };
keyValues.Add(table["col1"].ToString(), resfile.FileName);
string path = resfile.FilePath;
FieldData fielddata = new FieldData(path);
DataTable dt = fielddata.GetGeneralInfo();
DateTime star = new DateTime();
DateTime end = new DateTime();
System.Globalization.DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();
dtFormat.ShortDatePattern = "dd/MM/yyyy hh:mm:ss";
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["name"].ToString() == "TimeStart")
{
star = Convert.ToDateTime(dt.Rows[i]["value"], dtFormat);
}
if (dt.Rows[i]["name"].ToString() == "TimeEnd")
{
end = Convert.ToDateTime(dt.Rows[i]["value"], dtFormat);
}
}
}
TimeSpan timeSpan = end - star;
string all_FiledCount = ((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["SEMDataMsr"])["TotalFields"].ToString();
//当前屏幕尺寸/µm
double ScanFieldSize = Convert.ToDouble( ((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["SEMDataMsr"])["ScanFieldSize"]);
//100倍时屏幕尺寸/µm
double ScanFieldSize100 = Convert.ToDouble(((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["SEMDataMsr"])["ScanFieldSize100"]);
double Magnification = ScanFieldSize100 / ScanFieldSize * 100;
int filedCount = fielddata.GetFiledCount();
Dictionary sampleMembers = ((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"]);
Dictionary semDataMsr = (Dictionary)sampleMembers["SEMDataMsr"];
double scanFieldSize = Convert.ToDouble(semDataMsr["ScanFieldSize"]);
Dictionary imageScanParam = (Dictionary)((Dictionary)((Dictionary)sampleMembers["MsrParams"])["Members"])["ImageScanParam"];
string ImageResolution = imageScanParam["ImageResolution"].ToString();
double wide = Convert.ToDouble(ImageResolution.Split('_')[1]);
double high = Convert.ToDouble(ImageResolution.Split('_')[2]);
double pixelSize = scanFieldSize / wide;
double filedsArea = Math.Round(high * wide * pixelSize * pixelSize * filedCount, 2);
int particleArea = fielddata.GetparticleArea();
double ratio = particleArea / filedsArea;
//报告参数文件
string xmlpath = Application.StartupPath + m_frmReportApp.m_OTSReportMgrParamFile;
DataSet ds = XMLoperate.GetXmlData(xmlpath, "XMLData");
DataTable dt1 = ds.Tables["Member"];
string sizestr = "1000";
for (int i = 0; i < dt1.Rows.Count; i++)
{
if (dt1.Rows[i]["RegName"].ToString() == "Scale")
{
sizestr = dt1.Rows[i]["strValue"].ToString();
break;
}
}
keyValues.Add(table["col2"].ToString(), star.ToString("yyyy-MM-dd HH:mm:ss"));
keyValues.Add(table["col3"].ToString(), end.ToString("yyyy-MM-dd HH:mm:ss"));
keyValues.Add(table["col4"].ToString(), Math.Round(timeSpan.TotalMinutes, 2).ToString() + "mins");
keyValues.Add(table["col5"].ToString(), all_FiledCount.ToString());
string LibraryName = "";
if ("NoSTDDB" == ((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString())
{
LibraryName = "OTSIncASysSTD";
}
else
{
LibraryName = ((Dictionary)((Dictionary)((Dictionary)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString();
}
keyValues.Add(table["col6"].ToString(), LibraryName);
keyValues.Add(table["col7"].ToString(), fielddata.GetparticleCount().ToString());
keyValues.Add(table["col8"].ToString(), filedsArea.ToString());
keyValues.Add(table["col9"].ToString(), particleArea.ToString());
keyValues.Add(table["col10"].ToString(), ratio.ToString());
keyValues.Add(table["col11"].ToString(), sizestr);
keyValues.Add("Magnification", Math.Round(Magnification,2).ToString());
return keyValues;
}
///
/// 绑定GridView显示
///
///
private void addGrid(ResultFile resultFile)
{
Dictionary keyValues = GetData_ResultGrid(resultFile);
Dictionary.Enumerator en = keyValues.GetEnumerator();
for (int irow = 0; irow < keyValues.Count; irow++)
{
if (en.MoveNext())
{
//add row
int add_rowindex = 0;
add_rowindex = Gview_gz.Rows.Add();
if (irow == 0)
{
//set title style
Gview_gz.Rows[add_rowindex].Cells[0].Style.BackColor = System.Drawing.Color.PowderBlue;
Gview_gz.Rows[add_rowindex].Cells[1].Style.BackColor = System.Drawing.Color.PowderBlue;
}
else
{
//set row style
Gview_gz.Rows[add_rowindex].Cells[0].Style.BackColor = System.Drawing.Color.LightCyan;
}
//set value
Gview_gz.Rows[add_rowindex].Cells[0].Value = en.Current.Key;
Gview_gz.Rows[add_rowindex].Cells[1].Value = en.Current.Value;
}
}
//将左侧第一列,全部设置成System.Drawing.Color.PowderBlue; 当标题头不错
for (int i = 0; i < Gview_gz.Rows.Count; i++)
{
Gview_gz.Rows[i].Cells[0].Style.Font = new System.Drawing.Font("黑体", 10, System.Drawing.FontStyle.Bold);
Gview_gz.Rows[i].Cells[1].Style.Font = new System.Drawing.Font("黑体", 10, System.Drawing.FontStyle.Bold);
}
}
#endregion
#region 设置Grid样式
///
/// 设置夹杂物列表DataGridView样式
///
private void SetDataGridViewStyleIncLib()
{
//用户不能调整标题的高度
Gview_gz.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
//用户不能调整 行高
Gview_gz.AllowUserToResizeRows = false;
//再次重覆禁用拖动表头高度,居然有效果了
Gview_gz.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
//设置grid可以复制
Gview_gz.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
//设置每列的宽度
// dgV_IncALib.Columns[1].Width = 40;
Gview_gz.Columns[0].Width = 300;
//设置序号列不排序
Gview_gz.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
//设置序号列不可以设置宽度
Gview_gz.Columns[0].Resizable = DataGridViewTriState.False;
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
dataGridViewCellStyle1.BackColor = System.Drawing.Color.LightCyan;
Gview_gz.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
Gview_gz.BackgroundColor = System.Drawing.Color.White;
Gview_gz.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
Gview_gz.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;//211, 223, 240
dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(223)))), ((int)(((byte)(240)))));
dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Navy;
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
Gview_gz.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2;
Gview_gz.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
Gview_gz.EnableHeadersVisualStyles = false;
Gview_gz.GridColor = System.Drawing.SystemColors.GradientInactiveCaption;
Gview_gz.ReadOnly = true;
Gview_gz.RowHeadersVisible = false; //建议改为true;为了以后显示序号。
Gview_gz.RowTemplate.Height = 23;
Gview_gz.RowTemplate.ReadOnly = true;
//居中
Gview_gz.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
}
#endregion
#region 得到向word中插入Table所需要使用的,该模块结合后的对象数组
///
/// 获取到该模块输出后形成的DataTable,和GridView
///
///
///
public void GetDataTableAndGridView(out DataTable out_dt, out DataGridView out_dg)
{
out_dt = null;
out_dg = this.Gview_gz;
}
#endregion
#region 相关事件
///
/// 复制选择区域
///
public void CopySelected()
{
//复制选择区域
object oo = Gview_gz.GetClipboardContent();
Clipboard.SetDataObject(Gview_gz.GetClipboardContent());
}
///
/// 复制所有
///
public void CopyAll()
{
Gview_gz.SelectAll();
Clipboard.SetDataObject(Gview_gz.GetClipboardContent());
}
//复制整个表
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
CopyAll();
}
//复制选择区域
private void ToolStripMenuItem2_Click(object sender, EventArgs e)
{
CopySelected();
}
//恢复初始状态
private void ToolStripMenuItem3_Click(object sender, EventArgs e)
{
}
#endregion
}
}