ElementalAnalysis.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. 
  2. using DevExpress.CodeParser;
  3. using DevExpress.Utils.Gesture;
  4. using OTSCommon.DBOperate;
  5. using OTSCommon.DBOperate.Model;
  6. using OTSIncAReportApp.DataOperation.DataAccess;
  7. using OTSIncAReportApp.OTSSampleReportInfo;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using static OTSDataType.otsdataconst;
  15. using static OTSIncAReportApp.OTSReport_Export;
  16. namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration
  17. {
  18. /// <summary>
  19. /// 元素分析
  20. /// </summary>
  21. class ElementalAnalysis
  22. {
  23. /// <summary>
  24. /// 元素分析表(表头、表数据、全数据)
  25. /// </summary>
  26. /// <param name="m_mbszclass"></param>
  27. /// <param name="m_otsreport_export"></param>
  28. /// <returns></returns>
  29. public List<DataTable> GetElementData(BasicData basicData, OTSReport_Export m_otsreport_export)
  30. {
  31. List<DataTable> data = basicData.GetDBData();
  32. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  33. List<string> ClassName = ObtainParticleCategory(m_otsreport_export, basicData);
  34. //统计元素物质大类的元素信息和面积占比
  35. DataTable dt_ElementalSubstance = ElementalSubstance_cleanliness(data, ClassName, basicData.getParticleData());
  36. List<DataTable> dataTables=new List<DataTable>();
  37. dataTables = ElementSorting(data, ClassName, basicData.getParticleData());
  38. ////生成最后导出时物质元素成分表
  39. List<DataTable> dt2 = MaterialElementComposition(dataTables, 13, m_otsreport_export);//导出14个元素成分信息
  40. DataTable dtname = new DataTable();
  41. DataTable dtData = new DataTable();
  42. SubdivisionOfMaterialElements(dataTables, 13, ClassName, dt2, out dtname, out dtData);
  43. List<DataTable> datas = new List<DataTable>();
  44. datas.Add(dtname);
  45. datas.Add(dtData);
  46. //datas.Add(dt_ElementSorting);
  47. return datas;
  48. }
  49. /// <summary>
  50. /// 获得颗粒类别
  51. /// </summary>
  52. /// <returns></returns>
  53. private List<string> ObtainParticleCategory(OTSReport_Export m_otsreport_export ,BasicData basicData)
  54. {
  55. List<string> ClassName = new List<string>();
  56. if (m_otsreport_export.m_ReportApp.m_RptConfigFile.Systype != OTS_SysType_ID.IncA)
  57. {
  58. DataTable get_dt = ReadClassification(basicData);
  59. DataTable getClass_dt = get_dt.Clone();
  60. DataRow[] dataRow = get_dt.Select("", "iorder ASC");
  61. foreach (DataRow row in dataRow)
  62. {
  63. if (row.ItemArray[1].ToString() != "Default")
  64. {
  65. getClass_dt.ImportRow(row);
  66. }
  67. }
  68. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  69. {
  70. ClassName.Add(getClass_dt.Rows[i][1].ToString());
  71. }
  72. ClassName.Add("Default");
  73. }
  74. else
  75. {
  76. ClassName = basicData.GetGroupInformation();
  77. }
  78. return ClassName;
  79. }
  80. private DataTable ReadClassification(BasicData basicData)
  81. {
  82. DataTable dt_stl = new DataTable();
  83. SqLiteHelper sh = new SqLiteHelper("data source='" + basicData.GetFilePath() + "\\" + basicData.GetResfile() + "'");
  84. dt_stl = sh.ExecuteQuery("select * from STDGroups");
  85. return dt_stl;
  86. }
  87. private void SubdivisionOfMaterialElements(List<DataTable> a_ElementalSubstance, int NumberOfColumns, List<string> ClassName, List<DataTable> data, out DataTable dt1, out DataTable dt2)
  88. {
  89. DataTable dt_ElementalSubstance = new DataTable();
  90. dt_ElementalSubstance.Columns.Add("Class");
  91. dt_ElementalSubstance.Columns.Add("Area");
  92. dt_ElementalSubstance.Columns.Add("TypeId");
  93. dt_ElementalSubstance.Columns.Add("Name");
  94. for (int i = 4; i < data[0].Columns.Count; i++)
  95. {
  96. dt_ElementalSubstance.Columns.Add(data[0].Columns[i].ColumnName);
  97. }
  98. DataTable dtName = dt_ElementalSubstance.Clone();
  99. DataRow row1 = dtName.NewRow();
  100. for (int i = 0; i < dt_ElementalSubstance.Columns.Count; i++)
  101. {
  102. row1[i] = dt_ElementalSubstance.Columns[i].ColumnName;
  103. }
  104. dtName.Rows.Add(row1);
  105. dt1 = dtName.Copy();
  106. for (int i = 0; i < a_ElementalSubstance.Count; i++)
  107. {
  108. DataRow row = dt_ElementalSubstance.NewRow();
  109. row["Class"] = a_ElementalSubstance[i].Rows[0]["Class"].ToString();
  110. double dlArea = CalculationTableColumn(a_ElementalSubstance[i], "Area");
  111. row["Area"] = Math.Round(dlArea,2);
  112. double ELEtotal = 0;
  113. for (int a = 4; a < data[0].Columns.Count; a++)
  114. {
  115. ELEtotal= ELEtotal+ CalculationTableColumn(a_ElementalSubstance[i], data[0].Columns[a].ColumnName);
  116. }
  117. for (int a = 4; a < data[0].Columns.Count; a++)
  118. {
  119. double dlData = CalculationTableColumn(a_ElementalSubstance[i], data[0].Columns[a].ColumnName);
  120. // row[data[0].Columns[a].ColumnName] = Math.Round(dlData, 2);
  121. if (dlData == 0.0)
  122. {
  123. row[data[0].Columns[a].ColumnName] = 0;
  124. }
  125. else
  126. {
  127. double ColVal = Convert.ToDouble(dlData / ELEtotal * 100);
  128. row[data[0].Columns[a].ColumnName] = Math.Round(ColVal, 2);
  129. }
  130. }
  131. dt_ElementalSubstance.Rows.Add(row);
  132. for (int a = 0; a < data[i].Rows.Count; a++)
  133. {
  134. DataRow dr = dt_ElementalSubstance.NewRow();
  135. dr["Area"] = Math.Round(Convert.ToDouble(data[i].Rows[a]["Area"]), 2);
  136. dr["TypeId"] = data[i].Rows[a]["TypeId"].ToString();
  137. dr["Name"]= data[i].Rows[a]["TypeName"].ToString();
  138. double datotal = 0;
  139. for (int j = 4; j < data[0].Columns.Count; j++)
  140. {
  141. datotal= datotal+ Convert.ToDouble(data[i].Rows[a][data[0].Columns[j].ColumnName]);
  142. }
  143. for (int j = 4; j < data[0].Columns.Count; j++)
  144. {
  145. double dlData = Convert.ToDouble(data[i].Rows[a][data[0].Columns[j].ColumnName]);
  146. if (dlData == 0)
  147. {
  148. dr[data[0].Columns[j].ColumnName] = 0;
  149. }
  150. else
  151. {
  152. double ColVal = Convert.ToDouble(dlData / Convert.ToDouble(data[i].Rows[a]["Area"]));
  153. //double ColVal = Convert.ToDouble(dlData / datotal * 100);
  154. dr[data[0].Columns[j].ColumnName] = Math.Round(ColVal, 2);
  155. }
  156. //dr[data[0].Columns[j].ColumnName] = Math.Round(dlData, 2);
  157. }
  158. dt_ElementalSubstance.Rows.Add(dr);
  159. }
  160. }
  161. dt2 = dt_ElementalSubstance.Copy();
  162. }
  163. private List<DataTable> MaterialElementComposition( List<DataTable> a_ElementalSubstance, int NumberOfColumns, OTSReport_Export m_otsreport_export)
  164. {
  165. List<DataTable> dataTables = new List<DataTable>();
  166. DataTable dt_ElementalSubstance = new DataTable();
  167. dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
  168. dt_ElementalSubstance.Columns.Add("TypeName");
  169. dt_ElementalSubstance.Columns.Add("TypeId");
  170. dt_ElementalSubstance.Columns.Add("Area");
  171. dt_ElementalSubstance.Columns.Add("Class");
  172. for (int i = 0; i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count; i++)
  173. {
  174. dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
  175. }
  176. for (int i = 0; i < a_ElementalSubstance.Count; i++)
  177. {
  178. DataTable data = dt_ElementalSubstance.Clone();
  179. for (int a = 0; a < a_ElementalSubstance[i].Rows.Count; a++)
  180. {
  181. DataRow data1 = data.NewRow();
  182. data1["TypeName"] = a_ElementalSubstance[i].Rows[a]["TypeName"].ToString();
  183. data1["TypeId"]= a_ElementalSubstance[i].Rows[a]["TypeId"].ToString();
  184. data1["Area"]= a_ElementalSubstance[i].Rows[a]["Area"].ToString();
  185. data1["Class"]= a_ElementalSubstance[i].Rows[a]["Class"].ToString();
  186. int intt = 4;
  187. for (int j = 0; j < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count; j++)
  188. {
  189. if (a_ElementalSubstance[i].Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]))
  190. {
  191. 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]];
  192. }
  193. else
  194. {
  195. data1[m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]] = 0;
  196. }
  197. }
  198. data.Rows.Add(data1);
  199. }
  200. dataTables.Add(data);
  201. }
  202. //DataTable dt_ElementalSubstance = new DataTable();
  203. //dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
  204. //dt_ElementalSubstance.Columns.Add("Name");
  205. //dt_ElementalSubstance.Columns.Add("Area");
  206. //for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
  207. //{
  208. // dt_ElementalSubstance.Rows.Add(a_ElementalSubstance.Rows[i]["Name"]);
  209. // dt_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"]), 2);
  210. //}
  211. //int cunt = 1;
  212. //for (int i = 0; i < NumberOfColumns; i++)
  213. //{
  214. // if (i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count())
  215. // {
  216. // dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
  217. // for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  218. // {
  219. // if (a_ElementalSubstance.Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]))
  220. // {
  221. // if (a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]].ToString() == "")
  222. // {
  223. // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  224. // }
  225. // else
  226. // {
  227. // 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]];
  228. // }
  229. // }
  230. // else
  231. // {
  232. // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  233. // }
  234. // }
  235. // }
  236. // else
  237. // {
  238. // dt_ElementalSubstance.Columns.Add("Null" + cunt.ToString());
  239. // cunt = cunt + 1;
  240. // for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  241. // {
  242. // dt_ElementalSubstance.Rows[a][i + 2] = "-";
  243. // }
  244. // }
  245. //}
  246. //DataTable dataTable = new DataTable();
  247. //dataTable = dt_ElementalSubstance.Copy();
  248. //dataTable.Clear();
  249. //DataRow row = dataTable.NewRow();
  250. //dataTable.Rows.Add(row);
  251. //dataTable.TableName = "ElementalSubstance_Name";
  252. //for (int i = 0; i < dataTable.Columns.Count; i++)
  253. //{
  254. // dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
  255. //}
  256. //m_list_dt.Add(dataTable);
  257. //m_list_dt.Add(dt_ElementalSubstance);
  258. return dataTables;
  259. }
  260. private List<DataTable> ElementSorting(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  261. {
  262. List<DataTable> dataTables = new List<DataTable>();
  263. //当前元素物质类面积的总和
  264. DataTable dte = fielddata.GetAllElement();
  265. DataTable dt_Class = new DataTable();
  266. dt_Class.Columns.Add("TypeName");
  267. dt_Class.Columns.Add("TypeId");
  268. dt_Class.Columns.Add("Area");
  269. dt_Class.Columns.Add("Class");
  270. //循环创建元素列(类型定义为double,为以后计算做准备)
  271. for (int a = 0; a < dte.Rows.Count; a++)
  272. {
  273. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  274. }
  275. //循环组列表
  276. for (int i = 0; i < AllAnalysisDetails.Count; i++)
  277. {
  278. if (AllAnalysisDetails[i].Rows.Count == 0)
  279. {
  280. continue;
  281. }
  282. DataTable data = dt_Class.Clone();
  283. for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
  284. {
  285. data.TableName = AllAnalysisDetails[i].TableName;
  286. DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  287. DataRow dr2 = data.NewRow();
  288. if (ClassificationDetails.Rows.Count == 0)
  289. {
  290. for (int j = 4; j < data.Columns.Count; j++)
  291. {
  292. double doe = Convert.ToDouble(0);
  293. dr2[data.Columns[j].ColumnName] = doe;
  294. dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
  295. dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
  296. dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
  297. dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
  298. }
  299. }
  300. foreach (DataRow dr in ClassificationDetails.Rows)
  301. {
  302. double doe = Convert.ToDouble(dr["pc"]);
  303. dr2[dr["Name"].ToString()] = doe;
  304. dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
  305. dr2["TypeId"]=AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
  306. dr2["Area"]=AllAnalysisDetails[i].Rows[a]["ar"].ToString();
  307. dr2["Class"]= AllAnalysisDetails[i].Rows[a]["Class"].ToString();
  308. }
  309. data.Rows.Add(dr2);
  310. for (int j = 4; j < data.Columns.Count; j++)
  311. {
  312. if (data.Rows[data.Rows.Count - 1][j].ToString() == "")
  313. {
  314. data.Rows[data.Rows.Count - 1][j] = 0;
  315. }
  316. }
  317. }
  318. dataTables.Add(data);
  319. }
  320. //DataTable dte = fielddata.GetAllElement();
  321. //DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
  322. //ElementSorting_dt.Clear();
  323. //for (int i = 0; i < ClassName.Count; i++)
  324. //{
  325. // DataTable dt = AllAnalysisDetails.Copy();
  326. // dt.Clear();
  327. // for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  328. // {
  329. // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  330. // {
  331. // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  332. // }
  333. // }
  334. // //将颗粒大小排序(从大到小)
  335. // DataView dv = dt.DefaultView;
  336. // dv.Sort = "Area DESC";
  337. // DataTable dt_Element = dv.ToTable();
  338. // for (int a = 0; a < dt_Element.Rows.Count; a++)
  339. // {
  340. // ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  341. // }
  342. //}
  343. ////循环创建元素列(类型定义为double,为以后计算做准备)
  344. //for (int a = 0; a < dte.Rows.Count; a++)
  345. //{
  346. // ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  347. //}
  348. //for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
  349. //{
  350. // DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  351. // //DataRow dr2 = ElementSorting_dt.NewRow();
  352. // foreach (DataRow dr in ClassificationDetails.Rows)
  353. // {
  354. // double doe = Convert.ToDouble(dr["pc"]);
  355. // ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
  356. // }
  357. //}
  358. return dataTables;
  359. }
  360. private DataTable ElementalSubstance_cleanliness(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  361. {
  362. //当前元素物质类面积的总和
  363. DataTable dte = fielddata.GetAllElement();
  364. DataTable dt_Class = new DataTable();
  365. dt_Class.Columns.Add("Name");
  366. dt_Class.Columns.Add("Area");
  367. //循环创建元素列(类型定义为double,为以后计算做准备)
  368. for (int a = 0; a < dte.Rows.Count; a++)
  369. {
  370. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  371. }
  372. //循环组列表
  373. for (int i = 0; i < AllAnalysisDetails.Count; i++)
  374. {
  375. if (AllAnalysisDetails[i].Rows.Count == 0)
  376. {
  377. // DataRow row = dt_Class.NewRow();
  378. // row["Name"] = ClassName[i].ToString();
  379. // row["Area"] = 0;
  380. // for (int a = 4; a < dt_Class.Columns.Count; a++)
  381. // {
  382. // row[a] = 0;
  383. //}
  384. // dt_Class.Rows.Add(row);
  385. continue;
  386. }
  387. double del = CalculationTableColumn(AllAnalysisDetails[i], "ar");
  388. DataTable data = dt_Class.Clone();
  389. for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
  390. {
  391. DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  392. DataRow dr2 = data.NewRow();
  393. double arar = Convert.ToDouble(AllAnalysisDetails[i].Rows[a]["ar"]);
  394. if (ClassificationDetails.Rows.Count == 0)
  395. {
  396. for (int j = 4; j < data.Columns.Count; j++)
  397. {
  398. double doe = Convert.ToDouble(0);
  399. dr2[data.Columns[j].ColumnName] = doe;
  400. }
  401. }
  402. foreach (DataRow dr in ClassificationDetails.Rows)
  403. {
  404. if (dr["pc"].ToString() != "")
  405. {
  406. double p = Math.Round(Convert.ToDouble(dr["pc"]) / arar, 2);
  407. double doe = p;
  408. dr2[dr["Name"].ToString()] = doe;
  409. }
  410. else
  411. {
  412. dr2[dr["Name"].ToString()] = 0;
  413. }
  414. }
  415. data.Rows.Add(dr2);
  416. }
  417. DataRow row1 = dt_Class.NewRow();
  418. row1["Name"] = ClassName[i].ToString();
  419. row1["Area"] = del;
  420. for (int a = 4; a < data.Columns.Count; a++)
  421. {
  422. row1[a] = CalculationTableColumn(data, data.Columns[a].ColumnName);
  423. }
  424. dt_Class.Rows.Add(row1);
  425. }
  426. //for (int i = 0; i < ClassName.Count; i++)
  427. //{
  428. ////保留当前循环中大类物质,去除其他物质
  429. //DataTable dt = AllAnalysisDetails[0].Copy();
  430. //dt.Clear();
  431. //for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  432. //{
  433. // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  434. // {
  435. // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  436. // }
  437. //}
  438. //if (dt.Rows.Count == 0)
  439. // continue;
  440. //if (dt.Rows.Count == 0)
  441. //{
  442. // DataRow dataRow = dt.NewRow();
  443. // dataRow["Area"] = 0;
  444. // dt.Rows.Add(dataRow);
  445. // DataRow dataRow2 = dt_Class.NewRow();
  446. // dataRow2["Name"] = ClassName[i].ToString();
  447. // double ar0 = 0;
  448. // dataRow2["Area"] = ar0;
  449. // dt_Class.Rows.Add(dataRow2);
  450. // continue;
  451. //}
  452. //计算出当前循环中大类物质的面积
  453. // ElementalSubstance = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  454. //DataTable ta = new DataTable();
  455. //ta = dt_Class.Copy();
  456. //ta.Clear();
  457. //for (int a = 0; a < dt.Rows.Count; a++)
  458. //{
  459. // DataTable ClassificationDetails = fielddata.GetAreaByIncA(dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  460. // DataRow dr2 = ta.NewRow();
  461. // foreach (DataRow dr in ClassificationDetails.Rows)
  462. // {
  463. // double doe = Convert.ToDouble(dr["pc"]);
  464. // dr2[dr["Name"].ToString()] = doe;
  465. // }
  466. // ta.Rows.Add(dr2);
  467. //}
  468. //DataTable dataTable = ta.Copy();
  469. //dataTable.Clear();
  470. //DataRow row = dataTable.NewRow();
  471. //dataTable.Rows.Add(row);
  472. //for (int a = 0; a < ta.Columns.Count; a++)
  473. //{
  474. // if (ta.Columns[a].ToString() != "Name" && ta.Columns[a].ToString() != "Class")
  475. // {
  476. // bool bl = false;
  477. // for (int b = 0; b < ta.Rows.Count; b++)
  478. // {
  479. // if (!ta.Rows[b].IsNull(ta.Columns[a].ToString()))
  480. // {
  481. // bl = true;
  482. // }
  483. // }
  484. // if (bl)
  485. // //datatSuncolumn(ta, ta.Columns[a].ToString());
  486. // dataTable.Rows[0][ta.Columns[a].ToString()] = Math.Round(datatSuncolumn(ta, ta.Columns[a].ToString()) / ElementalSubstance, 2);
  487. // }
  488. //}
  489. //dataTable.Rows[0]["Name"] = ClassName[i].ToString();
  490. //dataTable.Rows[0]["Area"] = ElementalSubstance;
  491. //dt_Class.Rows.Add(dataTable.Rows[0].ItemArray);
  492. //}
  493. return dt_Class;
  494. }
  495. private double CalculationTableColumn(DataTable a_data , string a_str)
  496. {
  497. double dl = 0;
  498. if (a_data.Columns.Contains(a_str))
  499. {
  500. for (int i = 0; i < a_data.Rows.Count; i++)
  501. {
  502. if (a_data.Rows[i][a_str].ToString() != "")
  503. {
  504. dl = dl + Convert.ToDouble(a_data.Rows[i][a_str]);
  505. }
  506. }
  507. }
  508. return dl;
  509. }
  510. }
  511. }