using OTSCommon.Model; using OTSIncAReportApp.DataOperation.DataAccess; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using static OTSIncAReportApp.OTSReport_Export; namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration { /// /// 元素分析 /// class ElementalAnalysis { /// /// 元素分析表(表头、表数据、全数据) /// /// /// /// public List GetElementData(c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export) { DataTable data = GetDBData(m_mbszclass, m_otsreport_export); //根据sql条件,查询获取颗粒信息数据 ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); DataTable AllAnalysisDetails = new DataTable(); AllAnalysisDetails.TableName = "ElementValue"; AllAnalysisDetails.Columns.Add("Name"); AllAnalysisDetails.Columns.Add("TypeId"); AllAnalysisDetails.Columns.Add("Area", typeof(double)); AllAnalysisDetails.Columns.Add("Class"); for (int i = 0; i < data.Rows.Count; i++) { DataRow dr2 = AllAnalysisDetails.NewRow(); dr2["Name"] = data.Rows[i]["TypeName"].ToString(); dr2["Area"] = Convert.ToDouble(data.Rows[i]["ar"]); dr2["TypeId"] = data.Rows[i]["TypeId"].ToString(); dr2["Class"] = data.Rows[i]["Class"].ToString(); AllAnalysisDetails.Rows.Add(dr2); } //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序 List ClassName = new List(); DataTable getClass_dt = fielddata.GetAllClass(); for (int i = 0; i < getClass_dt.Rows.Count; i++) { if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid") //ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); if (getClass_dt.Rows[i]["GroupName"].ToString() == "") ClassName.Add("Default"); else ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); } //统计元素物质大类的元素信息和面积占比 DataTable dt_ElementalSubstance = ElementalSubstance(AllAnalysisDetails, ClassName, fielddata); //统计元素并按照Class Name自定义列表进行排序,大类中的小类元素信息按照面积从大到小排序 DataTable dt_ElementSorting = ElementSorting(AllAnalysisDetails, ClassName, fielddata); //生成最后导出时物质元素成分表 DataTable dt = MaterialElementComposition(dt_ElementalSubstance, 13, m_otsreport_export);//导出14个元素成分信息 //生成最后导出时物质元素细分表 DataTable dtname = new DataTable(); DataTable dtData = new DataTable(); SubdivisionOfMaterialElements(dt_ElementSorting, 13, ClassName, dt, out dtname, out dtData); //allElement_dt = dt_ElementSorting.Copy(); List datas = new List(); datas.Add(dtname); datas.Add(dtData); datas.Add(dt_ElementSorting); return datas; } private DataTable GetDBData(c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export) { DataTable m_bt_DBData = new DataTable(); ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); List colid = new List() { "TypeName", "ar", "TypeId", "Largest", "Class", "con" }; //获取粒级表 string path1 = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder + m_mbszclass.M_KLFXJG.str_cb_klcc_ljb.ToString(); DataSet ds = OTSIncAReportApp.DataOperation.DataAccess.XMLoperate.GetXml(path1); string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString(); for (int i = 0; i < sizestr.Split(',').Length - 1; i++) { if (sizestr.Split(',')[i].Length > 0) { double d1 = Convert.ToDouble(sizestr.Split(',')[i]); double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]); colid.Add(d1.ToString() + "~" + d2.ToString()); } } double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]); colid.Add(d.ToString() + "~MAX"); for (int i = 0; i < colid.Count; i++) { m_bt_DBData.Columns.Add(colid[i].ToString()); } DataTable dt = InvalidRemoval(fielddata.GetParticleListForParticlSize("area", "")); DataTable AreaInformationOfAllElements = InvalidRemoval(fielddata.GetAreaByAllIncA("")); DataTable dtp = InvalidRemoval(fielddata.GetParticleAll("")); //选择颗粒信息 DataTable data; SelectParticleData(out data, m_otsreport_export); //选择颗粒整理成表 DataTable Partic_dt = new DataTable(); if (data.Rows.Count > 0) { Partic_dt = GetParticleListForParticlSize(data, dtp); } List vs = new List() { "DMAX", "DMIN", "FERET", "Area" }; string po = vs[m_otsreport_export.m_mbszclass.M_KLFXJG.index_cb_klcc_jsfs]; switch (po) { case "DMAX": po = "DMAX"; break; case "DMIN": po = "DMIN"; break; case "ECD": po = "Area"; break; case "FERET": po = "DFERET"; break; } //如果是全部颗粒(0) if (m_mbszclass.M_SY.int_xzkl == 0) { for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = m_bt_DBData.NewRow(); dr["TypeName"] = dt.Rows[i]["TypeName"].ToString(); dr["TypeId"] = dt.Rows[i]["TypeId"].ToString(); dr["con"] = dt.Rows[i]["con"].ToString(); if (dt.Rows[i]["GroupName"].ToString() == "") dr["Class"] = "Default"; else dr["Class"] = dt.Rows[i]["GroupName"].ToString(); //continue; dr["Largest"] = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2); for (int a = 6; a < colid.Count; a++) { string d1 = colid[a].Split('~')[0]; string d2 = colid[a].Split('~')[1]; if (d2 == "MAX") { d2 = "999"; } DataRow[] datas = dtp.Select(getWhere(d2, d1, po, dt.Rows[i]["TypeId"].ToString())); dr[colid[a]] = datas.Count(); } for (int a = 0; a < AreaInformationOfAllElements.Rows.Count; a++) { if (dt.Rows[i]["TypeId"].ToString() == AreaInformationOfAllElements.Rows[a]["TypeId"].ToString()) { dr["ar"] = AreaInformationOfAllElements.Rows[a]["ar"]; } } m_bt_DBData.Rows.Add(dr); } } else//选择颗粒(1) { for (int i = 0; i < Partic_dt.Rows.Count; i++) { DataRow dr = m_bt_DBData.NewRow(); dr["TypeName"] = Partic_dt.Rows[i]["TypeName"].ToString(); dr["TypeId"] = Partic_dt.Rows[i]["TypeId"].ToString(); dr["con"] = Partic_dt.Rows[i]["con"].ToString(); dr["Class"] = Partic_dt.Rows[i]["GroupName"].ToString(); dr["Largest"] = Math.Round(Convert.ToDouble(Partic_dt.Rows[i]["max"]), 2); for (int a = 6; a < colid.Count; a++) { string d1 = colid[a].Split('~')[0]; string d2 = colid[a].Split('~')[1]; if (d2 == "MAX") { d2 = "999"; } DataRow[] datas = dtp.Select(getWhere(d2, d1, po, Partic_dt.Rows[i]["TypeId"].ToString())); dr[colid[a]] = datas.Count(); } dr["ar"] = Partic_dt.Rows[i]["Area"]; m_bt_DBData.Rows.Add(dr); } } //去除物质分类(非夹杂物分类) for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++) { for (int i = m_bt_DBData.Rows.Count - 1; i >= 0; i--) { if (m_bt_DBData.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString()) { m_bt_DBData.Rows.RemoveAt(i); } } } return m_bt_DBData; } private DataTable GetParticleListForParticlSize(DataTable data, DataTable table) { DataTable dt_Partick = new DataTable(); dt_Partick.Columns.Add("TypeId"); dt_Partick.Columns.Add("TypeName"); dt_Partick.Columns.Add("TypeColor"); dt_Partick.Columns.Add("con"); dt_Partick.Columns.Add("ar"); dt_Partick.Columns.Add("max"); dt_Partick.Columns.Add("Area", typeof(double)); dt_Partick.Columns.Add("GroupName"); List typeName = new List(); for (int i = 0; i < data.Rows.Count; i++) { typeName.Add(data.Rows[i]["TypeId"].ToString()); } typeName = typeName.Distinct().ToList(); for (int i = 0; i < typeName.Count; i++) { DataTable dt = dt_Partick.Clone(); for (int j = 0; j < data.Rows.Count; j++) { if (typeName[i].ToString() == data.Rows[j]["TypeId"].ToString()) { DataRow row = dt.NewRow(); row["TypeId"] = data.Rows[j]["TypeId"]; row["TypeName"] = data.Rows[j]["TypeName"]; row["TypeColor"] = data.Rows[j]["TypeColor"]; row["Area"] = data.Rows[j]["Area"]; dt.Rows.Add(row); } } DataRow dr = dt_Partick.NewRow(); dr["TypeId"] = dt.Rows[0]["TypeId"].ToString(); dr["TypeName"] = dt.Rows[0]["TypeName"].ToString(); dr["TypeColor"] = dt.Rows[0]["TypeColor"].ToString(); dr["con"] = dt.Rows.Count; dr["ar"] = dt.Compute("min(Area)", ""); dr["max"] = dt.Compute("Max(Area)", ""); dr["Area"] = dt.Compute("SUM(Area)", ""); dt_Partick.Rows.Add(dr); } for (int i = 0; i < dt_Partick.Rows.Count; i++) { for (int j = 0; j < table.Rows.Count; j++) { if (dt_Partick.Rows[i]["TypeId"].ToString() == table.Rows[j]["TypeId"].ToString()) { dt_Partick.Rows[i]["GroupName"] = table.Rows[j]["GroupName"]; break; } } } return dt_Partick; } private void SelectParticleData(out DataTable dt, OTSReport_Export m_otsreport_export) { List selectParticles = m_otsreport_export.m_ReportApp.GetSelectedParticles(); #region Datatable数据表格式 DataTable dtUelect = new DataTable(); dtUelect.Columns.Add("fieldid"); dtUelect.Columns.Add("particleid"); dtUelect.Columns.Add("AveGray"); dtUelect.Columns.Add("RectLeft"); dtUelect.Columns.Add("RectTop"); dtUelect.Columns.Add("RectWidth"); dtUelect.Columns.Add("RectHeight"); dtUelect.Columns.Add("Area"); dtUelect.Columns.Add("PosX"); dtUelect.Columns.Add("PosY"); dtUelect.Columns.Add("TypeId"); dtUelect.Columns.Add("SegmentNum"); dtUelect.Columns.Add("SEMPosX"); dtUelect.Columns.Add("SEMPosY"); dtUelect.Columns.Add("XrayId"); dtUelect.Columns.Add("DMAX"); dtUelect.Columns.Add("DMIN"); dtUelect.Columns.Add("DPERP"); dtUelect.Columns.Add("PERIMETER"); dtUelect.Columns.Add("ORIENTATION"); dtUelect.Columns.Add("DINSCR"); dtUelect.Columns.Add("DMEAN"); dtUelect.Columns.Add("DELONG"); dtUelect.Columns.Add("DFERET"); dtUelect.Columns.Add("TypeName"); dtUelect.Columns.Add("TypeColor"); #endregion for (int i = 0; i < selectParticles.Count; i++) { dtUelect.Rows.Add(selectParticles[i].FieldId, selectParticles[i].ParticleId, selectParticles[i].AveGray, selectParticles[i].RectLeft, selectParticles[i].RectTop, selectParticles[i].RectWidth, selectParticles[i].RectHeight, selectParticles[i].Area, selectParticles[i].PosX, selectParticles[i].PosX, selectParticles[i].TypeId, /*selectParticles[i].ElementNum,*/ selectParticles[i].SegmentNum, selectParticles[i].SEMPosX, selectParticles[i].SEMPosY, selectParticles[i].ParticleId, selectParticles[i].DMAX, selectParticles[i].DMIN, selectParticles[i].DPERP, selectParticles[i].PERIMETER, selectParticles[i].ORIENTATION, selectParticles[i].DINSCR, selectParticles[i].DMEAN, selectParticles[i].DELONG, selectParticles[i].DFERET, selectParticles[i].TypeName, selectParticles[i].TypeColor); } dt = dtUelect.Copy(); } private DataTable InvalidRemoval(DataTable dt) { DataTable dataTable = dt.Copy(); dataTable.Clear(); for (int i = 0; i < dt.Rows.Count; i++) { if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 10) { dataTable.Rows.Add(dt.Rows[i].ItemArray); } } return dataTable; } private string getWhere(string max, string min, string col, string partic) { return col + ">=" + min + " and " + col + "<" + max + " and TypeId=" + partic; } /// /// 判断是否有大分类,有为true /// /// /// public bool IsThereAMajorClassification(OTSReport_Export m_otsreport_export) { ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); DataTable getClass_dt = fielddata.GetAllClass(); List ClassName = new List(); for (int i = 0; i < getClass_dt.Rows.Count; i++) { if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid" && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified") if (getClass_dt.Rows[i]["GroupName"].ToString() == "") ClassName.Add("Default"); else ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); } if (ClassName.Count < 2) { return false; } else { return true; } } 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[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 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 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; //计算出当前循环中大类物质的面积 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 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; } /// /// 参数归一化 /// /// 总数 /// 传参 /// public string ParameterNormalization(double a_mi, double m) { double ColVal = Convert.ToDouble(m / a_mi * 100); if (ColVal == 0) { return ""; } else { return Math.Round(ColVal, 2).ToString(); } } } }