ElementalAnalysis.cs 24 KB

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