123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990 |
-
- using DevExpress.CodeParser;
- using DevExpress.Utils.Gesture;
- using OTSCommon.DBOperate;
- using OTSCommon.DBOperate.Model;
- using OTSIncAReportApp.DataOperation.DataAccess;
- using OTSIncAReportApp.OTSSampleReportInfo;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using static OTSDataType.otsdataconst;
- using static OTSIncAReportApp.OTSReport_Export;
- namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration
- {
- /// <summary>
- /// 元素分析
- /// </summary>
- class ElementalAnalysis
- {
- /// <summary>
- /// 元素分析表(表头、表数据、全数据)
- /// </summary>
- /// <param name="m_mbszclass"></param>
- /// <param name="m_otsreport_export"></param>
- /// <returns></returns>
- public List<DataTable> GetElementData(BasicData basicData, OTSReport_Export m_otsreport_export)
- {
- List<DataTable> data = basicData.GetDBData();
-
-
- //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
- List<string> ClassName = ObtainParticleCategory(m_otsreport_export, basicData);
- //统计元素物质大类的元素信息和面积占比
- DataTable dt_ElementalSubstance = ElementalSubstance_cleanliness(data, ClassName, basicData.getParticleData());
- List<DataTable> dataTables=new List<DataTable>();
-
-
- dataTables = ElementSorting(data, ClassName, basicData.getParticleData());
-
- ////生成最后导出时物质元素成分表
- List<DataTable> dt2 = MaterialElementComposition(dataTables, 13, m_otsreport_export);//导出14个元素成分信息
- DataTable dtname = new DataTable();
- DataTable dtData = new DataTable();
- SubdivisionOfMaterialElements(dataTables, 13, ClassName, dt2, out dtname, out dtData);
- List<DataTable> datas = new List<DataTable>();
- datas.Add(dtname);
- datas.Add(dtData);
- //datas.Add(dt_ElementSorting);
- return datas;
- }
- /// <summary>
- /// 获得颗粒类别
- /// </summary>
- /// <returns></returns>
- private List<string> ObtainParticleCategory(OTSReport_Export m_otsreport_export ,BasicData basicData)
- {
- List<string> ClassName = new List<string>();
- if (m_otsreport_export.m_ReportApp.m_RptConfigFile.Systype != OTS_SysType_ID.IncA)
- {
- DataTable get_dt = ReadClassification(basicData);
- DataTable getClass_dt = get_dt.Clone();
- DataRow[] dataRow = get_dt.Select("", "iorder ASC");
- foreach (DataRow row in dataRow)
- {
- if (row.ItemArray[1].ToString() != "Default")
- {
- getClass_dt.ImportRow(row);
- }
- }
- for (int i = 0; i < getClass_dt.Rows.Count; i++)
- {
- ClassName.Add(getClass_dt.Rows[i][1].ToString());
- }
- ClassName.Add("Default");
- }
- else
- {
- ClassName = basicData.GetGroupInformation();
- }
- return ClassName;
- }
- private DataTable ReadClassification(BasicData basicData)
- {
- DataTable dt_stl = new DataTable();
- SqLiteHelper sh = new SqLiteHelper("data source='" + basicData.GetFilePath() + "\\" + basicData.GetResfile() + "'");
- dt_stl = sh.ExecuteQuery("select * from STDGroups");
- return dt_stl;
- }
- private void SubdivisionOfMaterialElements(List<DataTable> a_ElementalSubstance, int NumberOfColumns, List<string> ClassName, List<DataTable> data, out DataTable dt1, out DataTable dt2)
- {
- DataTable dt_ElementalSubstance = new DataTable();
- dt_ElementalSubstance.Columns.Add("Class");
- dt_ElementalSubstance.Columns.Add("Area");
- dt_ElementalSubstance.Columns.Add("TypeId");
- dt_ElementalSubstance.Columns.Add("Name");
- for (int i = 4; i < data[0].Columns.Count; i++)
- {
- dt_ElementalSubstance.Columns.Add(data[0].Columns[i].ColumnName);
- }
- DataTable dtName = dt_ElementalSubstance.Clone();
- DataRow row1 = dtName.NewRow();
- for (int i = 0; i < dt_ElementalSubstance.Columns.Count; i++)
- {
- row1[i] = dt_ElementalSubstance.Columns[i].ColumnName;
- }
- dtName.Rows.Add(row1);
- dt1 = dtName.Copy();
- for (int i = 0; i < a_ElementalSubstance.Count; i++)
- {
- DataRow row = dt_ElementalSubstance.NewRow();
- row["Class"] = a_ElementalSubstance[i].Rows[0]["Class"].ToString();
- double dlArea = CalculationTableColumn(a_ElementalSubstance[i], "Area");
- row["Area"] = Math.Round(dlArea,2);
- for (int a = 4; a < data[0].Columns.Count; a++)
- {
- double dlData= CalculationTableColumn(a_ElementalSubstance[i], data[0].Columns[a].ColumnName);
- row[data[0].Columns[a].ColumnName] = Math.Round(dlData, 2);
- }
- dt_ElementalSubstance.Rows.Add(row);
- for (int a = 0; a < data[i].Rows.Count; a++)
- {
- DataRow dr = dt_ElementalSubstance.NewRow();
- dr["Area"] = Math.Round(Convert.ToDouble(data[i].Rows[a]["Area"]), 2);
- dr["TypeId"] = data[i].Rows[a]["TypeId"].ToString();
- dr["Name"]= data[i].Rows[a]["TypeName"].ToString();
- for (int j = 4; j < data[0].Columns.Count; j++)
- {
- double dlData = Convert.ToDouble(data[i].Rows[a][data[0].Columns[j].ColumnName]);
- dr[data[0].Columns[j].ColumnName] = Math.Round(dlData, 2);
- }
- dt_ElementalSubstance.Rows.Add(dr);
- }
- }
- dt2 = dt_ElementalSubstance.Copy();
- }
- private bool SubdivisionOfMaterialElements(DataTable a_ElementalSubstance, int NumberOfColumns, List<string> ClassName, DataTable data, out DataTable dt1, out DataTable dt2)
- {
- DataTable dt_ElementalSubstance = new DataTable();
- dt_ElementalSubstance = data.Copy();
- dt_ElementalSubstance.Clear();
- dt_ElementalSubstance.TableName = "ElementSubdivision_Value";
- dt_ElementalSubstance.Columns["Name"].ColumnName = "Class";
- dt_ElementalSubstance.Columns.Add("Name");
- //处理元素面积保留小数点后两位
- for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
- {
- a_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"].ToString()), 2);
- }
- //循环元素物质大类
- for (int i = 0; i < ClassName.Count; i++)
- {
- DataTable dt_1 = new DataTable();
- dt_1 = data.Copy();
- dt_1.Clear();
- for (int a = 0; a < data.Rows.Count; a++)
- {
- if (data.Rows[a]["Name"].ToString() == ClassName[i].ToString())
- {
- dt_1.Rows.Add(data.Rows[a].ItemArray);
- }
- }
- dt_1.Columns["Name"].ColumnName = "Class";
- dt_1.Columns.Add("Name");
- DataTable dt_2 = new DataTable();
- dt_2 = dt_1.Copy();
- dt_2.Clear();
- dt_2.Rows.Add();
- //循环整个表筛选出当前的物质
- for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
- {
- if(ClassName.Count==1)
- {
- for (int b = 0; b < dt_1.Columns.Count; b++)
- {
- if (dt_2.Columns[b].ToString() != "Class")
- {
- if (a_ElementalSubstance.Columns.Contains(dt_2.Columns[b].ToString()))
- {
- if (a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()].ToString() == "")
- {
- dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
- }
- else
- {
- dt_2.Rows[0][dt_2.Columns[b].ToString()] = a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()];
- }
- }
- else
- {
- dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
- }
- }
- }
- dt_1.Rows.Add(dt_2.Rows[0].ItemArray);
- }
- else
- if (ClassName[i].ToString() == a_ElementalSubstance.Rows[a]["Class"].ToString())
- {
- for (int b = 0; b < dt_1.Columns.Count; b++)
- {
- if (dt_2.Columns[b].ToString() != "Class")
- {
- if (a_ElementalSubstance.Columns.Contains(dt_2.Columns[b].ToString()))
- {
- if (a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()].ToString() == "")
- {
- dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
- }
- else
- {
- dt_2.Rows[0][dt_2.Columns[b].ToString()] = a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()];
- }
- }
- else
- {
- dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
- }
- }
- }
- dt_1.Rows.Add(dt_2.Rows[0].ItemArray);
- }
-
- }
- for (int a = 0; a < dt_1.Rows.Count; a++)
- {
- dt_ElementalSubstance.Rows.Add(dt_1.Rows[a].ItemArray);
- }
- }
- DataTable dataTable = new DataTable();
- dataTable = dt_ElementalSubstance.Copy();
- dataTable.Clear();
- DataRow row = dataTable.NewRow();
- dataTable.Rows.Add(row);
- dataTable.TableName = "ElementSubdivision_Name";
- for (int i = 0; i < dataTable.Columns.Count; i++)
- {
- dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
- }
- dt1 = dataTable.Copy();
- dt2 = dt_ElementalSubstance.Copy();
- return true;
- }
- private DataTable MaterialElementComposition(DataTable a_ElementalSubstance, int NumberOfColumns,OTSReport_Export m_otsreport_export)
- {
- DataTable dt_ElementalSubstance = new DataTable();
- dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
- dt_ElementalSubstance.Columns.Add("Name");
- dt_ElementalSubstance.Columns.Add("Area");
- for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
- {
- dt_ElementalSubstance.Rows.Add(a_ElementalSubstance.Rows[i]["Name"]);
- dt_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"]), 2);
- }
- int cunt = 1;
- for (int i = 0; i < NumberOfColumns; i++)
- {
- if (i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count())
- {
- dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
- for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
- {
- if (a_ElementalSubstance.Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]))
- {
- if (a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]].ToString() == "")
- {
- dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
- }
- else
- {
- dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]];
- }
- }
- else
- {
- dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
- }
- }
- }
- else
- {
- dt_ElementalSubstance.Columns.Add("Null" + cunt.ToString());
- cunt = cunt + 1;
- for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
- {
- dt_ElementalSubstance.Rows[a][i + 2] = "-";
- }
- }
- }
- DataTable dataTable = new DataTable();
- dataTable = dt_ElementalSubstance.Copy();
- dataTable.Clear();
- DataRow row = dataTable.NewRow();
- dataTable.Rows.Add(row);
- dataTable.TableName = "ElementalSubstance_Name";
- for (int i = 0; i < dataTable.Columns.Count; i++)
- {
- dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
- }
- //m_list_dt.Add(dataTable);
- //m_list_dt.Add(dt_ElementalSubstance);
- return dt_ElementalSubstance;
- }
- private List<DataTable> MaterialElementComposition( List<DataTable> a_ElementalSubstance, int NumberOfColumns, OTSReport_Export m_otsreport_export)
- {
- List<DataTable> dataTables = new List<DataTable>();
- DataTable dt_ElementalSubstance = new DataTable();
- dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
- dt_ElementalSubstance.Columns.Add("TypeName");
- dt_ElementalSubstance.Columns.Add("TypeId");
- dt_ElementalSubstance.Columns.Add("Area");
- dt_ElementalSubstance.Columns.Add("Class");
- for (int i = 0; i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count; i++)
- {
- dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
- }
- for (int i = 0; i < a_ElementalSubstance.Count; i++)
- {
- DataTable data = dt_ElementalSubstance.Clone();
-
- for (int a = 0; a < a_ElementalSubstance[i].Rows.Count; a++)
- {
- DataRow data1 = data.NewRow();
- data1["TypeName"] = a_ElementalSubstance[i].Rows[a]["TypeName"].ToString();
- data1["TypeId"]= a_ElementalSubstance[i].Rows[a]["TypeId"].ToString();
- data1["Area"]= a_ElementalSubstance[i].Rows[a]["Area"].ToString();
- data1["Class"]= a_ElementalSubstance[i].Rows[a]["Class"].ToString();
- int intt = 4;
- for (int j = 0; j < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count; j++)
- {
- if (a_ElementalSubstance[i].Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]))
- {
- data1[m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]] = a_ElementalSubstance[i].Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]];
- }
- else
- {
- data1[m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]] = 0;
- }
- }
- data.Rows.Add(data1);
- }
- dataTables.Add(data);
- }
- //DataTable dt_ElementalSubstance = new DataTable();
- //dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
- //dt_ElementalSubstance.Columns.Add("Name");
- //dt_ElementalSubstance.Columns.Add("Area");
- //for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
- //{
- // dt_ElementalSubstance.Rows.Add(a_ElementalSubstance.Rows[i]["Name"]);
- // dt_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"]), 2);
- //}
- //int cunt = 1;
- //for (int i = 0; i < NumberOfColumns; i++)
- //{
- // if (i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count())
- // {
- // dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
- // for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
- // {
- // if (a_ElementalSubstance.Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]))
- // {
- // if (a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]].ToString() == "")
- // {
- // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
- // }
- // else
- // {
- // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]];
- // }
- // }
- // else
- // {
- // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
- // }
- // }
- // }
- // else
- // {
- // dt_ElementalSubstance.Columns.Add("Null" + cunt.ToString());
- // cunt = cunt + 1;
- // for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
- // {
- // dt_ElementalSubstance.Rows[a][i + 2] = "-";
- // }
- // }
- //}
- //DataTable dataTable = new DataTable();
- //dataTable = dt_ElementalSubstance.Copy();
- //dataTable.Clear();
- //DataRow row = dataTable.NewRow();
- //dataTable.Rows.Add(row);
- //dataTable.TableName = "ElementalSubstance_Name";
- //for (int i = 0; i < dataTable.Columns.Count; i++)
- //{
- // dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
- //}
- //m_list_dt.Add(dataTable);
- //m_list_dt.Add(dt_ElementalSubstance);
- return dataTables;
- }
- private DataTable ElementSorting(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
- {
- DataTable dte = fielddata.GetAllElement();
- DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
- ElementSorting_dt.Clear();
- for (int i = 0; i < ClassName.Count; i++)
- {
- DataTable dt = AllAnalysisDetails.Copy();
- dt.Clear();
- for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
- {
- if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
- {
- dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
- }
- }
- //将颗粒大小排序(从大到小)
- DataView dv = dt.DefaultView;
- dv.Sort = "Area DESC";
- DataTable dt_Element = dv.ToTable();
- for (int a = 0; a < dt_Element.Rows.Count; a++)
- {
- ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
- }
- }
- //循环创建元素列(类型定义为double,为以后计算做准备)
- for (int a = 0; a < dte.Rows.Count; a++)
- {
- ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- }
- for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
- {
- DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- //DataRow dr2 = ElementSorting_dt.NewRow();
- foreach (DataRow dr in ClassificationDetails.Rows)
- {
- double doe = Convert.ToDouble(dr["pc"]);
- ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
- }
- }
- return ElementSorting_dt;
- }
- private List<DataTable> ElementSorting(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
- {
- List<DataTable> dataTables = new List<DataTable>();
-
- //当前元素物质类面积的总和
- DataTable dte = fielddata.GetAllElement();
- DataTable dt_Class = new DataTable();
- dt_Class.Columns.Add("TypeName");
- dt_Class.Columns.Add("TypeId");
- dt_Class.Columns.Add("Area");
- dt_Class.Columns.Add("Class");
- //循环创建元素列(类型定义为double,为以后计算做准备)
- for (int a = 0; a < dte.Rows.Count; a++)
- {
- dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- }
- //循环组列表
- for (int i = 0; i < AllAnalysisDetails.Count; i++)
- {
- if (AllAnalysisDetails[i].Rows.Count == 0)
- {
- continue;
- }
- DataTable data = dt_Class.Clone();
-
- for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
- {
- data.TableName = AllAnalysisDetails[i].TableName;
- DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- DataRow dr2 = data.NewRow();
- if (ClassificationDetails.Rows.Count == 0)
- {
- for (int j = 4; j < data.Columns.Count; j++)
- {
- double doe = Convert.ToDouble(0);
- dr2[data.Columns[j].ColumnName] = doe;
- dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
- dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
- dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
- dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
- }
- }
- foreach (DataRow dr in ClassificationDetails.Rows)
- {
- double doe = Convert.ToDouble(dr["pc"]);
- dr2[dr["Name"].ToString()] = doe;
- dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
- dr2["TypeId"]=AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
- dr2["Area"]=AllAnalysisDetails[i].Rows[a]["ar"].ToString();
- dr2["Class"]= AllAnalysisDetails[i].Rows[a]["Class"].ToString();
- }
- data.Rows.Add(dr2);
- for (int j = 4; j < data.Columns.Count; j++)
- {
- if (data.Rows[data.Rows.Count - 1][j].ToString() == "")
- {
- data.Rows[data.Rows.Count - 1][j] = 0;
- }
- }
- }
- dataTables.Add(data);
- }
- //DataTable dte = fielddata.GetAllElement();
- //DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
- //ElementSorting_dt.Clear();
- //for (int i = 0; i < ClassName.Count; i++)
- //{
- // DataTable dt = AllAnalysisDetails.Copy();
- // dt.Clear();
- // for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
- // {
- // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
- // {
- // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
- // }
- // }
- // //将颗粒大小排序(从大到小)
- // DataView dv = dt.DefaultView;
- // dv.Sort = "Area DESC";
- // DataTable dt_Element = dv.ToTable();
- // for (int a = 0; a < dt_Element.Rows.Count; a++)
- // {
- // ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
- // }
- //}
- ////循环创建元素列(类型定义为double,为以后计算做准备)
- //for (int a = 0; a < dte.Rows.Count; a++)
- //{
- // ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- //}
- //for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
- //{
- // DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- // //DataRow dr2 = ElementSorting_dt.NewRow();
- // foreach (DataRow dr in ClassificationDetails.Rows)
- // {
- // double doe = Convert.ToDouble(dr["pc"]);
- // ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
- // }
- //}
- return dataTables;
- }
- private DataTable ElementSortingSS(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
- {
- DataTable dte = fielddata.GetAllElement();
- DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
- ElementSorting_dt.Clear();
- for (int i = 0; i < ClassName.Count; i++)
- {
- DataTable dt = AllAnalysisDetails.Copy();
- //dt.Clear();
- //for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
- //{
- // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
- // {
- // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
- // }
- //}
- //将颗粒大小排序(从大到小)
- //DataView dv = dt.DefaultView;
- //dv.Sort = "Area DESC";
- //DataTable dt_Element = dv.ToTable();
- DataTable dt_Element = dt.Copy();
- for (int a = 0; a < dt_Element.Rows.Count; a++)
- {
- ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
- }
- }
- //循环创建元素列(类型定义为double,为以后计算做准备)
- for (int a = 0; a < dte.Rows.Count; a++)
- {
- ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- }
- for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
- {
- DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- //DataRow dr2 = ElementSorting_dt.NewRow();
- foreach (DataRow dr in ClassificationDetails.Rows)
- {
- double doe = Convert.ToDouble(dr["pc"]);
- ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
- }
- }
- return ElementSorting_dt;
- }
- private List<DataTable> ElementSortingSS(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
- {
- List<DataTable> dataTables = new List<DataTable>();
- //当前元素物质类面积的总和
- DataTable dte = fielddata.GetAllElement();
- DataTable dt_Class = new DataTable();
- dt_Class.Columns.Add("TypeName");
- dt_Class.Columns.Add("TypeId");
- dt_Class.Columns.Add("Area");
- dt_Class.Columns.Add("Class");
- //循环创建元素列(类型定义为double,为以后计算做准备)
- for (int a = 0; a < dte.Rows.Count; a++)
- {
- dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- }
- //循环组列表
- for (int i = 0; i < AllAnalysisDetails.Count; i++)
- {
- if (AllAnalysisDetails[i].Rows.Count == 0)
- {
- continue;
- }
- DataTable data = dt_Class.Clone();
- for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
- {
- data.TableName = AllAnalysisDetails[i].TableName;
- DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- DataRow dr2 = data.NewRow();
- if (ClassificationDetails.Rows.Count == 0)
- {
- for (int j = 4; j < data.Columns.Count; j++)
- {
- double doe = Convert.ToDouble(0);
- dr2[data.Columns[j].ColumnName] = doe;
- dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
- dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
- dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
- dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
- }
- }
- foreach (DataRow dr in ClassificationDetails.Rows)
- {
- double doe = Convert.ToDouble(dr["pc"]);
- dr2[dr["Name"].ToString()] = doe;
- dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
- dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
- dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
- dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
- }
- data.Rows.Add(dr2);
- for (int j = 4; j < data.Columns.Count; j++)
- {
- if (data.Rows[data.Rows.Count - 1][j].ToString() == "")
- {
- data.Rows[data.Rows.Count - 1][j] = 0;
- }
- }
- }
- dataTables.Add(data);
- }
- return dataTables;
- }
- private DataTable ElementalSubstance(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
- {
- //当前元素物质类面积的总和
- double ElementalSubstance = 0;
- DataTable dte = fielddata.GetAllElement();
- DataTable dt_Class = new DataTable();
- dt_Class.Columns.Add("Name");
- dt_Class.Columns.Add("Area");
- //循环创建元素列(类型定义为double,为以后计算做准备)
- for (int a = 0; a < dte.Rows.Count; a++)
- {
- dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- }
- //循环大类物质列表
- for (int i = 0; i < ClassName.Count; i++)
- {
- //保留当前循环中大类物质,去除其他物质
- DataTable dt = AllAnalysisDetails.Copy();
- dt.Clear();
- for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
- {
- if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
- {
- dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
- }
- }
- //if (dt.Rows.Count == 0)
- // continue;
- if (dt.Rows.Count == 0)
- {
- DataRow dataRow = dt.NewRow();
- dataRow["Area"] = 0;
- dt.Rows.Add(dataRow);
- DataRow dataRow2 = dt_Class.NewRow();
- dataRow2["Name"]= ClassName[i].ToString();
- double ar0 = 0;
- dataRow2["Area"] = ar0;
- dt_Class.Rows.Add(dataRow2);
- continue;
- }
- //计算出当前循环中大类物质的面积
- ElementalSubstance = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
- DataTable ta = new DataTable();
- ta = dt_Class.Copy();
- ta.Clear();
- for (int a = 0; a < dt.Rows.Count; a++)
- {
- DataTable ClassificationDetails = fielddata.GetAreaByIncA(dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- DataRow dr2 = ta.NewRow();
- foreach (DataRow dr in ClassificationDetails.Rows)
- {
- double doe = Convert.ToDouble(dr["pc"]);
- dr2[dr["Name"].ToString()] = doe;
- }
- ta.Rows.Add(dr2);
- }
- DataTable dataTable = ta.Copy();
- dataTable.Clear();
- DataRow row = dataTable.NewRow();
- dataTable.Rows.Add(row);
- for (int a = 0; a < ta.Columns.Count; a++)
- {
- if (ta.Columns[a].ToString() != "Name" && ta.Columns[a].ToString() != "Class")
- {
- bool bl = false;
- for (int b = 0; b < ta.Rows.Count; b++)
- {
- if (!ta.Rows[b].IsNull(ta.Columns[a].ToString()))
- {
- bl = true;
- }
- }
- if (bl)
- //datatSuncolumn(ta, ta.Columns[a].ToString());
- dataTable.Rows[0][ta.Columns[a].ToString()] = Math.Round(datatSuncolumn(ta, ta.Columns[a].ToString()) / ElementalSubstance, 2);
- }
- }
- dataTable.Rows[0]["Name"] = ClassName[i].ToString();
- dataTable.Rows[0]["Area"] = ElementalSubstance;
- dt_Class.Rows.Add(dataTable.Rows[0].ItemArray);
- }
- return dt_Class;
- }
- private DataTable ElementalSubstance_cleanliness(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
- {
- //当前元素物质类面积的总和
- DataTable dte = fielddata.GetAllElement();
- DataTable dt_Class = new DataTable();
- dt_Class.Columns.Add("Name");
- dt_Class.Columns.Add("Area");
- //循环创建元素列(类型定义为double,为以后计算做准备)
- for (int a = 0; a < dte.Rows.Count; a++)
- {
- dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
- }
- //循环组列表
- for (int i = 0; i < AllAnalysisDetails.Count; i++)
- {
- if (AllAnalysisDetails[i].Rows.Count == 0)
- {
- // DataRow row = dt_Class.NewRow();
- // row["Name"] = ClassName[i].ToString();
- // row["Area"] = 0;
- // for (int a = 4; a < dt_Class.Columns.Count; a++)
- // {
- // row[a] = 0;
- //}
- // dt_Class.Rows.Add(row);
- continue;
- }
- double del = CalculationTableColumn(AllAnalysisDetails[i], "ar");
- DataTable data = dt_Class.Clone();
- for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
- {
- DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- DataRow dr2 = data.NewRow();
- if (ClassificationDetails.Rows.Count == 0)
- {
- for (int j = 4; j < data.Columns.Count; j++)
- {
- double doe = Convert.ToDouble(0);
- dr2[data.Columns[j].ColumnName] = doe;
- }
- }
- foreach (DataRow dr in ClassificationDetails.Rows)
- {
- double doe = Convert.ToDouble(dr["pc"]);
- dr2[dr["Name"].ToString()] = doe;
- }
- data.Rows.Add(dr2);
- }
- DataRow row1 = dt_Class.NewRow();
- row1["Name"] = ClassName[i].ToString();
- row1["Area"] = del;
- for (int a = 4; a < data.Columns.Count; a++)
- {
- row1[a] = CalculationTableColumn(data, data.Columns[a].ColumnName);
- }
- dt_Class.Rows.Add(row1);
- }
- //for (int i = 0; i < ClassName.Count; i++)
- //{
- ////保留当前循环中大类物质,去除其他物质
- //DataTable dt = AllAnalysisDetails[0].Copy();
- //dt.Clear();
- //for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
- //{
- // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
- // {
- // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
- // }
- //}
- //if (dt.Rows.Count == 0)
- // continue;
- //if (dt.Rows.Count == 0)
- //{
- // DataRow dataRow = dt.NewRow();
- // dataRow["Area"] = 0;
- // dt.Rows.Add(dataRow);
- // DataRow dataRow2 = dt_Class.NewRow();
- // dataRow2["Name"] = ClassName[i].ToString();
- // double ar0 = 0;
- // dataRow2["Area"] = ar0;
- // dt_Class.Rows.Add(dataRow2);
- // continue;
- //}
- //计算出当前循环中大类物质的面积
- // ElementalSubstance = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
- //DataTable ta = new DataTable();
- //ta = dt_Class.Copy();
- //ta.Clear();
- //for (int a = 0; a < dt.Rows.Count; a++)
- //{
- // DataTable ClassificationDetails = fielddata.GetAreaByIncA(dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
- // DataRow dr2 = ta.NewRow();
- // foreach (DataRow dr in ClassificationDetails.Rows)
- // {
- // double doe = Convert.ToDouble(dr["pc"]);
- // dr2[dr["Name"].ToString()] = doe;
- // }
- // ta.Rows.Add(dr2);
- //}
- //DataTable dataTable = ta.Copy();
- //dataTable.Clear();
- //DataRow row = dataTable.NewRow();
- //dataTable.Rows.Add(row);
- //for (int a = 0; a < ta.Columns.Count; a++)
- //{
- // if (ta.Columns[a].ToString() != "Name" && ta.Columns[a].ToString() != "Class")
- // {
- // bool bl = false;
- // for (int b = 0; b < ta.Rows.Count; b++)
- // {
- // if (!ta.Rows[b].IsNull(ta.Columns[a].ToString()))
- // {
- // bl = true;
- // }
- // }
- // if (bl)
- // //datatSuncolumn(ta, ta.Columns[a].ToString());
- // dataTable.Rows[0][ta.Columns[a].ToString()] = Math.Round(datatSuncolumn(ta, ta.Columns[a].ToString()) / ElementalSubstance, 2);
- // }
- //}
- //dataTable.Rows[0]["Name"] = ClassName[i].ToString();
- //dataTable.Rows[0]["Area"] = ElementalSubstance;
- //dt_Class.Rows.Add(dataTable.Rows[0].ItemArray);
- //}
- return dt_Class;
- }
- private double CalculationTableColumn(DataTable a_data , string a_str)
- {
- double dl = 0;
- if (a_data.Columns.Contains(a_str))
- {
- for (int i = 0; i < a_data.Rows.Count; i++)
- {
- if (a_data.Rows[i][a_str].ToString() != "")
- {
- dl = dl + Convert.ToDouble(a_data.Rows[i][a_str]);
- }
- }
- }
-
- return dl;
- }
- private double datatSuncolumn(DataTable dt, string str)
- {
- double sum = 0;
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- if (dt.Rows[i][str].ToString() == "")
- {
- dt.Rows[i][str] = 0;
- }
- sum = sum + Convert.ToDouble(dt.Rows[i][str].ToString());
- }
- return sum;
- }
- }
- }
|