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 { /// /// 元素分析 /// class ElementalAnalysis { /// /// 元素分析表(表头、表数据、全数据) /// /// /// /// public List GetElementData(BasicData basicData, OTSReport_Export m_otsreport_export) { List data = basicData.GetDBData(); //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序 List ClassName = ObtainParticleCategory(m_otsreport_export, basicData); //统计元素物质大类的元素信息和面积占比 DataTable dt_ElementalSubstance = ElementalSubstance_cleanliness(data, ClassName, basicData.getParticleData()); List dataTables=new List(); dataTables = ElementSorting(data, ClassName, basicData.getParticleData()); ////生成最后导出时物质元素成分表 List 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 datas = new List(); datas.Add(dtname); datas.Add(dtData); //datas.Add(dt_ElementSorting); return datas; } /// /// 获得颗粒类别 /// /// private List ObtainParticleCategory(OTSReport_Export m_otsreport_export ,BasicData basicData) { List ClassName = new List(); 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 a_ElementalSubstance, int NumberOfColumns, List ClassName, List 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 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 MaterialElementComposition( List a_ElementalSubstance, int NumberOfColumns, OTSReport_Export m_otsreport_export) { List dataTables = new List(); 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 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 ElementSorting(List AllAnalysisDetails, List ClassName, ParticleData fielddata) { List dataTables = new List(); //当前元素物质类面积的总和 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 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 ElementSortingSS(List AllAnalysisDetails, List ClassName, ParticleData fielddata) { List dataTables = new List(); //当前元素物质类面积的总和 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 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 AllAnalysisDetails, List 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; } } }