ElementalAnalysis.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  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. for (int a = 4; a < data[0].Columns.Count; a++)
  113. {
  114. double dlData= CalculationTableColumn(a_ElementalSubstance[i], data[0].Columns[a].ColumnName);
  115. row[data[0].Columns[a].ColumnName] = Math.Round(dlData, 2);
  116. }
  117. dt_ElementalSubstance.Rows.Add(row);
  118. for (int a = 0; a < data[i].Rows.Count; a++)
  119. {
  120. DataRow dr = dt_ElementalSubstance.NewRow();
  121. dr["Area"] = Math.Round(Convert.ToDouble(data[i].Rows[a]["Area"]), 2);
  122. dr["TypeId"] = data[i].Rows[a]["TypeId"].ToString();
  123. dr["Name"]= data[i].Rows[a]["TypeName"].ToString();
  124. for (int j = 4; j < data[0].Columns.Count; j++)
  125. {
  126. double dlData = Convert.ToDouble(data[i].Rows[a][data[0].Columns[j].ColumnName]);
  127. dr[data[0].Columns[j].ColumnName] = Math.Round(dlData, 2);
  128. }
  129. dt_ElementalSubstance.Rows.Add(dr);
  130. }
  131. }
  132. dt2 = dt_ElementalSubstance.Copy();
  133. }
  134. private bool SubdivisionOfMaterialElements(DataTable a_ElementalSubstance, int NumberOfColumns, List<string> ClassName, DataTable data, out DataTable dt1, out DataTable dt2)
  135. {
  136. DataTable dt_ElementalSubstance = new DataTable();
  137. dt_ElementalSubstance = data.Copy();
  138. dt_ElementalSubstance.Clear();
  139. dt_ElementalSubstance.TableName = "ElementSubdivision_Value";
  140. dt_ElementalSubstance.Columns["Name"].ColumnName = "Class";
  141. dt_ElementalSubstance.Columns.Add("Name");
  142. //处理元素面积保留小数点后两位
  143. for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
  144. {
  145. a_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"].ToString()), 2);
  146. }
  147. //循环元素物质大类
  148. for (int i = 0; i < ClassName.Count; i++)
  149. {
  150. DataTable dt_1 = new DataTable();
  151. dt_1 = data.Copy();
  152. dt_1.Clear();
  153. for (int a = 0; a < data.Rows.Count; a++)
  154. {
  155. if (data.Rows[a]["Name"].ToString() == ClassName[i].ToString())
  156. {
  157. dt_1.Rows.Add(data.Rows[a].ItemArray);
  158. }
  159. }
  160. dt_1.Columns["Name"].ColumnName = "Class";
  161. dt_1.Columns.Add("Name");
  162. DataTable dt_2 = new DataTable();
  163. dt_2 = dt_1.Copy();
  164. dt_2.Clear();
  165. dt_2.Rows.Add();
  166. //循环整个表筛选出当前的物质
  167. for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  168. {
  169. if(ClassName.Count==1)
  170. {
  171. for (int b = 0; b < dt_1.Columns.Count; b++)
  172. {
  173. if (dt_2.Columns[b].ToString() != "Class")
  174. {
  175. if (a_ElementalSubstance.Columns.Contains(dt_2.Columns[b].ToString()))
  176. {
  177. if (a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()].ToString() == "")
  178. {
  179. dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
  180. }
  181. else
  182. {
  183. dt_2.Rows[0][dt_2.Columns[b].ToString()] = a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()];
  184. }
  185. }
  186. else
  187. {
  188. dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
  189. }
  190. }
  191. }
  192. dt_1.Rows.Add(dt_2.Rows[0].ItemArray);
  193. }
  194. else
  195. if (ClassName[i].ToString() == a_ElementalSubstance.Rows[a]["Class"].ToString())
  196. {
  197. for (int b = 0; b < dt_1.Columns.Count; b++)
  198. {
  199. if (dt_2.Columns[b].ToString() != "Class")
  200. {
  201. if (a_ElementalSubstance.Columns.Contains(dt_2.Columns[b].ToString()))
  202. {
  203. if (a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()].ToString() == "")
  204. {
  205. dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
  206. }
  207. else
  208. {
  209. dt_2.Rows[0][dt_2.Columns[b].ToString()] = a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()];
  210. }
  211. }
  212. else
  213. {
  214. dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
  215. }
  216. }
  217. }
  218. dt_1.Rows.Add(dt_2.Rows[0].ItemArray);
  219. }
  220. }
  221. for (int a = 0; a < dt_1.Rows.Count; a++)
  222. {
  223. dt_ElementalSubstance.Rows.Add(dt_1.Rows[a].ItemArray);
  224. }
  225. }
  226. DataTable dataTable = new DataTable();
  227. dataTable = dt_ElementalSubstance.Copy();
  228. dataTable.Clear();
  229. DataRow row = dataTable.NewRow();
  230. dataTable.Rows.Add(row);
  231. dataTable.TableName = "ElementSubdivision_Name";
  232. for (int i = 0; i < dataTable.Columns.Count; i++)
  233. {
  234. dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
  235. }
  236. dt1 = dataTable.Copy();
  237. dt2 = dt_ElementalSubstance.Copy();
  238. return true;
  239. }
  240. private DataTable MaterialElementComposition(DataTable a_ElementalSubstance, int NumberOfColumns,OTSReport_Export m_otsreport_export)
  241. {
  242. DataTable dt_ElementalSubstance = new DataTable();
  243. dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
  244. dt_ElementalSubstance.Columns.Add("Name");
  245. dt_ElementalSubstance.Columns.Add("Area");
  246. for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
  247. {
  248. dt_ElementalSubstance.Rows.Add(a_ElementalSubstance.Rows[i]["Name"]);
  249. dt_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"]), 2);
  250. }
  251. int cunt = 1;
  252. for (int i = 0; i < NumberOfColumns; i++)
  253. {
  254. if (i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count())
  255. {
  256. dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
  257. for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  258. {
  259. if (a_ElementalSubstance.Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]))
  260. {
  261. if (a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]].ToString() == "")
  262. {
  263. dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  264. }
  265. else
  266. {
  267. 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]];
  268. }
  269. }
  270. else
  271. {
  272. dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  273. }
  274. }
  275. }
  276. else
  277. {
  278. dt_ElementalSubstance.Columns.Add("Null" + cunt.ToString());
  279. cunt = cunt + 1;
  280. for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  281. {
  282. dt_ElementalSubstance.Rows[a][i + 2] = "-";
  283. }
  284. }
  285. }
  286. DataTable dataTable = new DataTable();
  287. dataTable = dt_ElementalSubstance.Copy();
  288. dataTable.Clear();
  289. DataRow row = dataTable.NewRow();
  290. dataTable.Rows.Add(row);
  291. dataTable.TableName = "ElementalSubstance_Name";
  292. for (int i = 0; i < dataTable.Columns.Count; i++)
  293. {
  294. dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
  295. }
  296. //m_list_dt.Add(dataTable);
  297. //m_list_dt.Add(dt_ElementalSubstance);
  298. return dt_ElementalSubstance;
  299. }
  300. private List<DataTable> MaterialElementComposition( List<DataTable> a_ElementalSubstance, int NumberOfColumns, OTSReport_Export m_otsreport_export)
  301. {
  302. List<DataTable> dataTables = new List<DataTable>();
  303. DataTable dt_ElementalSubstance = new DataTable();
  304. dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
  305. dt_ElementalSubstance.Columns.Add("TypeName");
  306. dt_ElementalSubstance.Columns.Add("TypeId");
  307. dt_ElementalSubstance.Columns.Add("Area");
  308. dt_ElementalSubstance.Columns.Add("Class");
  309. for (int i = 0; i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count; i++)
  310. {
  311. dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
  312. }
  313. for (int i = 0; i < a_ElementalSubstance.Count; i++)
  314. {
  315. DataTable data = dt_ElementalSubstance.Clone();
  316. for (int a = 0; a < a_ElementalSubstance[i].Rows.Count; a++)
  317. {
  318. DataRow data1 = data.NewRow();
  319. data1["TypeName"] = a_ElementalSubstance[i].Rows[a]["TypeName"].ToString();
  320. data1["TypeId"]= a_ElementalSubstance[i].Rows[a]["TypeId"].ToString();
  321. data1["Area"]= a_ElementalSubstance[i].Rows[a]["Area"].ToString();
  322. data1["Class"]= a_ElementalSubstance[i].Rows[a]["Class"].ToString();
  323. int intt = 4;
  324. for (int j = 0; j < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count; j++)
  325. {
  326. if (a_ElementalSubstance[i].Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]))
  327. {
  328. 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]];
  329. }
  330. else
  331. {
  332. data1[m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[j]] = 0;
  333. }
  334. }
  335. data.Rows.Add(data1);
  336. }
  337. dataTables.Add(data);
  338. }
  339. //DataTable dt_ElementalSubstance = new DataTable();
  340. //dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
  341. //dt_ElementalSubstance.Columns.Add("Name");
  342. //dt_ElementalSubstance.Columns.Add("Area");
  343. //for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
  344. //{
  345. // dt_ElementalSubstance.Rows.Add(a_ElementalSubstance.Rows[i]["Name"]);
  346. // dt_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"]), 2);
  347. //}
  348. //int cunt = 1;
  349. //for (int i = 0; i < NumberOfColumns; i++)
  350. //{
  351. // if (i < m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count())
  352. // {
  353. // dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
  354. // for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  355. // {
  356. // if (a_ElementalSubstance.Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]))
  357. // {
  358. // if (a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]].ToString() == "")
  359. // {
  360. // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  361. // }
  362. // else
  363. // {
  364. // 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]];
  365. // }
  366. // }
  367. // else
  368. // {
  369. // dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  370. // }
  371. // }
  372. // }
  373. // else
  374. // {
  375. // dt_ElementalSubstance.Columns.Add("Null" + cunt.ToString());
  376. // cunt = cunt + 1;
  377. // for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  378. // {
  379. // dt_ElementalSubstance.Rows[a][i + 2] = "-";
  380. // }
  381. // }
  382. //}
  383. //DataTable dataTable = new DataTable();
  384. //dataTable = dt_ElementalSubstance.Copy();
  385. //dataTable.Clear();
  386. //DataRow row = dataTable.NewRow();
  387. //dataTable.Rows.Add(row);
  388. //dataTable.TableName = "ElementalSubstance_Name";
  389. //for (int i = 0; i < dataTable.Columns.Count; i++)
  390. //{
  391. // dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
  392. //}
  393. //m_list_dt.Add(dataTable);
  394. //m_list_dt.Add(dt_ElementalSubstance);
  395. return dataTables;
  396. }
  397. private DataTable ElementSorting(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  398. {
  399. DataTable dte = fielddata.GetAllElement();
  400. DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
  401. ElementSorting_dt.Clear();
  402. for (int i = 0; i < ClassName.Count; i++)
  403. {
  404. DataTable dt = AllAnalysisDetails.Copy();
  405. dt.Clear();
  406. for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  407. {
  408. if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  409. {
  410. dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  411. }
  412. }
  413. //将颗粒大小排序(从大到小)
  414. DataView dv = dt.DefaultView;
  415. dv.Sort = "Area DESC";
  416. DataTable dt_Element = dv.ToTable();
  417. for (int a = 0; a < dt_Element.Rows.Count; a++)
  418. {
  419. ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  420. }
  421. }
  422. //循环创建元素列(类型定义为double,为以后计算做准备)
  423. for (int a = 0; a < dte.Rows.Count; a++)
  424. {
  425. ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  426. }
  427. for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
  428. {
  429. DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  430. //DataRow dr2 = ElementSorting_dt.NewRow();
  431. foreach (DataRow dr in ClassificationDetails.Rows)
  432. {
  433. double doe = Convert.ToDouble(dr["pc"]);
  434. ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
  435. }
  436. }
  437. return ElementSorting_dt;
  438. }
  439. private List<DataTable> ElementSorting(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  440. {
  441. List<DataTable> dataTables = new List<DataTable>();
  442. //当前元素物质类面积的总和
  443. DataTable dte = fielddata.GetAllElement();
  444. DataTable dt_Class = new DataTable();
  445. dt_Class.Columns.Add("TypeName");
  446. dt_Class.Columns.Add("TypeId");
  447. dt_Class.Columns.Add("Area");
  448. dt_Class.Columns.Add("Class");
  449. //循环创建元素列(类型定义为double,为以后计算做准备)
  450. for (int a = 0; a < dte.Rows.Count; a++)
  451. {
  452. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  453. }
  454. //循环组列表
  455. for (int i = 0; i < AllAnalysisDetails.Count; i++)
  456. {
  457. if (AllAnalysisDetails[i].Rows.Count == 0)
  458. {
  459. continue;
  460. }
  461. DataTable data = dt_Class.Clone();
  462. for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
  463. {
  464. data.TableName = AllAnalysisDetails[i].TableName;
  465. DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  466. DataRow dr2 = data.NewRow();
  467. if (ClassificationDetails.Rows.Count == 0)
  468. {
  469. for (int j = 4; j < data.Columns.Count; j++)
  470. {
  471. double doe = Convert.ToDouble(0);
  472. dr2[data.Columns[j].ColumnName] = doe;
  473. dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
  474. dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
  475. dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
  476. dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
  477. }
  478. }
  479. foreach (DataRow dr in ClassificationDetails.Rows)
  480. {
  481. double doe = Convert.ToDouble(dr["pc"]);
  482. dr2[dr["Name"].ToString()] = doe;
  483. dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
  484. dr2["TypeId"]=AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
  485. dr2["Area"]=AllAnalysisDetails[i].Rows[a]["ar"].ToString();
  486. dr2["Class"]= AllAnalysisDetails[i].Rows[a]["Class"].ToString();
  487. }
  488. data.Rows.Add(dr2);
  489. for (int j = 4; j < data.Columns.Count; j++)
  490. {
  491. if (data.Rows[data.Rows.Count - 1][j].ToString() == "")
  492. {
  493. data.Rows[data.Rows.Count - 1][j] = 0;
  494. }
  495. }
  496. }
  497. dataTables.Add(data);
  498. }
  499. //DataTable dte = fielddata.GetAllElement();
  500. //DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
  501. //ElementSorting_dt.Clear();
  502. //for (int i = 0; i < ClassName.Count; i++)
  503. //{
  504. // DataTable dt = AllAnalysisDetails.Copy();
  505. // dt.Clear();
  506. // for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  507. // {
  508. // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  509. // {
  510. // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  511. // }
  512. // }
  513. // //将颗粒大小排序(从大到小)
  514. // DataView dv = dt.DefaultView;
  515. // dv.Sort = "Area DESC";
  516. // DataTable dt_Element = dv.ToTable();
  517. // for (int a = 0; a < dt_Element.Rows.Count; a++)
  518. // {
  519. // ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  520. // }
  521. //}
  522. ////循环创建元素列(类型定义为double,为以后计算做准备)
  523. //for (int a = 0; a < dte.Rows.Count; a++)
  524. //{
  525. // ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  526. //}
  527. //for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
  528. //{
  529. // DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  530. // //DataRow dr2 = ElementSorting_dt.NewRow();
  531. // foreach (DataRow dr in ClassificationDetails.Rows)
  532. // {
  533. // double doe = Convert.ToDouble(dr["pc"]);
  534. // ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
  535. // }
  536. //}
  537. return dataTables;
  538. }
  539. private DataTable ElementSortingSS(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  540. {
  541. DataTable dte = fielddata.GetAllElement();
  542. DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
  543. ElementSorting_dt.Clear();
  544. for (int i = 0; i < ClassName.Count; i++)
  545. {
  546. DataTable dt = AllAnalysisDetails.Copy();
  547. //dt.Clear();
  548. //for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  549. //{
  550. // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  551. // {
  552. // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  553. // }
  554. //}
  555. //将颗粒大小排序(从大到小)
  556. //DataView dv = dt.DefaultView;
  557. //dv.Sort = "Area DESC";
  558. //DataTable dt_Element = dv.ToTable();
  559. DataTable dt_Element = dt.Copy();
  560. for (int a = 0; a < dt_Element.Rows.Count; a++)
  561. {
  562. ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  563. }
  564. }
  565. //循环创建元素列(类型定义为double,为以后计算做准备)
  566. for (int a = 0; a < dte.Rows.Count; a++)
  567. {
  568. ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  569. }
  570. for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
  571. {
  572. DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  573. //DataRow dr2 = ElementSorting_dt.NewRow();
  574. foreach (DataRow dr in ClassificationDetails.Rows)
  575. {
  576. double doe = Convert.ToDouble(dr["pc"]);
  577. ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round(doe / Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]), 2);
  578. }
  579. }
  580. return ElementSorting_dt;
  581. }
  582. private List<DataTable> ElementSortingSS(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  583. {
  584. List<DataTable> dataTables = new List<DataTable>();
  585. //当前元素物质类面积的总和
  586. DataTable dte = fielddata.GetAllElement();
  587. DataTable dt_Class = new DataTable();
  588. dt_Class.Columns.Add("TypeName");
  589. dt_Class.Columns.Add("TypeId");
  590. dt_Class.Columns.Add("Area");
  591. dt_Class.Columns.Add("Class");
  592. //循环创建元素列(类型定义为double,为以后计算做准备)
  593. for (int a = 0; a < dte.Rows.Count; a++)
  594. {
  595. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  596. }
  597. //循环组列表
  598. for (int i = 0; i < AllAnalysisDetails.Count; i++)
  599. {
  600. if (AllAnalysisDetails[i].Rows.Count == 0)
  601. {
  602. continue;
  603. }
  604. DataTable data = dt_Class.Clone();
  605. for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
  606. {
  607. data.TableName = AllAnalysisDetails[i].TableName;
  608. DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  609. DataRow dr2 = data.NewRow();
  610. if (ClassificationDetails.Rows.Count == 0)
  611. {
  612. for (int j = 4; j < data.Columns.Count; j++)
  613. {
  614. double doe = Convert.ToDouble(0);
  615. dr2[data.Columns[j].ColumnName] = doe;
  616. dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
  617. dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
  618. dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
  619. dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
  620. }
  621. }
  622. foreach (DataRow dr in ClassificationDetails.Rows)
  623. {
  624. double doe = Convert.ToDouble(dr["pc"]);
  625. dr2[dr["Name"].ToString()] = doe;
  626. dr2["TypeName"] = AllAnalysisDetails[i].Rows[a]["TypeName"].ToString();
  627. dr2["TypeId"] = AllAnalysisDetails[i].Rows[a]["TypeId"].ToString();
  628. dr2["Area"] = AllAnalysisDetails[i].Rows[a]["ar"].ToString();
  629. dr2["Class"] = AllAnalysisDetails[i].Rows[a]["Class"].ToString();
  630. }
  631. data.Rows.Add(dr2);
  632. for (int j = 4; j < data.Columns.Count; j++)
  633. {
  634. if (data.Rows[data.Rows.Count - 1][j].ToString() == "")
  635. {
  636. data.Rows[data.Rows.Count - 1][j] = 0;
  637. }
  638. }
  639. }
  640. dataTables.Add(data);
  641. }
  642. return dataTables;
  643. }
  644. private DataTable ElementalSubstance(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  645. {
  646. //当前元素物质类面积的总和
  647. double ElementalSubstance = 0;
  648. DataTable dte = fielddata.GetAllElement();
  649. DataTable dt_Class = new DataTable();
  650. dt_Class.Columns.Add("Name");
  651. dt_Class.Columns.Add("Area");
  652. //循环创建元素列(类型定义为double,为以后计算做准备)
  653. for (int a = 0; a < dte.Rows.Count; a++)
  654. {
  655. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  656. }
  657. //循环大类物质列表
  658. for (int i = 0; i < ClassName.Count; i++)
  659. {
  660. //保留当前循环中大类物质,去除其他物质
  661. DataTable dt = AllAnalysisDetails.Copy();
  662. dt.Clear();
  663. for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  664. {
  665. if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  666. {
  667. dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  668. }
  669. }
  670. //if (dt.Rows.Count == 0)
  671. // continue;
  672. if (dt.Rows.Count == 0)
  673. {
  674. DataRow dataRow = dt.NewRow();
  675. dataRow["Area"] = 0;
  676. dt.Rows.Add(dataRow);
  677. DataRow dataRow2 = dt_Class.NewRow();
  678. dataRow2["Name"]= ClassName[i].ToString();
  679. double ar0 = 0;
  680. dataRow2["Area"] = ar0;
  681. dt_Class.Rows.Add(dataRow2);
  682. continue;
  683. }
  684. //计算出当前循环中大类物质的面积
  685. ElementalSubstance = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  686. DataTable ta = new DataTable();
  687. ta = dt_Class.Copy();
  688. ta.Clear();
  689. for (int a = 0; a < dt.Rows.Count; a++)
  690. {
  691. DataTable ClassificationDetails = fielddata.GetAreaByIncA(dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  692. DataRow dr2 = ta.NewRow();
  693. foreach (DataRow dr in ClassificationDetails.Rows)
  694. {
  695. double doe = Convert.ToDouble(dr["pc"]);
  696. dr2[dr["Name"].ToString()] = doe;
  697. }
  698. ta.Rows.Add(dr2);
  699. }
  700. DataTable dataTable = ta.Copy();
  701. dataTable.Clear();
  702. DataRow row = dataTable.NewRow();
  703. dataTable.Rows.Add(row);
  704. for (int a = 0; a < ta.Columns.Count; a++)
  705. {
  706. if (ta.Columns[a].ToString() != "Name" && ta.Columns[a].ToString() != "Class")
  707. {
  708. bool bl = false;
  709. for (int b = 0; b < ta.Rows.Count; b++)
  710. {
  711. if (!ta.Rows[b].IsNull(ta.Columns[a].ToString()))
  712. {
  713. bl = true;
  714. }
  715. }
  716. if (bl)
  717. //datatSuncolumn(ta, ta.Columns[a].ToString());
  718. dataTable.Rows[0][ta.Columns[a].ToString()] = Math.Round(datatSuncolumn(ta, ta.Columns[a].ToString()) / ElementalSubstance, 2);
  719. }
  720. }
  721. dataTable.Rows[0]["Name"] = ClassName[i].ToString();
  722. dataTable.Rows[0]["Area"] = ElementalSubstance;
  723. dt_Class.Rows.Add(dataTable.Rows[0].ItemArray);
  724. }
  725. return dt_Class;
  726. }
  727. private DataTable ElementalSubstance_cleanliness(List<DataTable> AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  728. {
  729. //当前元素物质类面积的总和
  730. DataTable dte = fielddata.GetAllElement();
  731. DataTable dt_Class = new DataTable();
  732. dt_Class.Columns.Add("Name");
  733. dt_Class.Columns.Add("Area");
  734. //循环创建元素列(类型定义为double,为以后计算做准备)
  735. for (int a = 0; a < dte.Rows.Count; a++)
  736. {
  737. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  738. }
  739. //循环组列表
  740. for (int i = 0; i < AllAnalysisDetails.Count; i++)
  741. {
  742. if (AllAnalysisDetails[i].Rows.Count == 0)
  743. {
  744. // DataRow row = dt_Class.NewRow();
  745. // row["Name"] = ClassName[i].ToString();
  746. // row["Area"] = 0;
  747. // for (int a = 4; a < dt_Class.Columns.Count; a++)
  748. // {
  749. // row[a] = 0;
  750. //}
  751. // dt_Class.Rows.Add(row);
  752. continue;
  753. }
  754. double del = CalculationTableColumn(AllAnalysisDetails[i], "ar");
  755. DataTable data = dt_Class.Clone();
  756. for (int a = 0; a < AllAnalysisDetails[i].Rows.Count; a++)
  757. {
  758. DataTable ClassificationDetails = fielddata.GetAreaByIncA(AllAnalysisDetails[i].Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  759. DataRow dr2 = data.NewRow();
  760. if (ClassificationDetails.Rows.Count == 0)
  761. {
  762. for (int j = 4; j < data.Columns.Count; j++)
  763. {
  764. double doe = Convert.ToDouble(0);
  765. dr2[data.Columns[j].ColumnName] = doe;
  766. }
  767. }
  768. foreach (DataRow dr in ClassificationDetails.Rows)
  769. {
  770. double doe = Convert.ToDouble(dr["pc"]);
  771. dr2[dr["Name"].ToString()] = doe;
  772. }
  773. data.Rows.Add(dr2);
  774. }
  775. DataRow row1 = dt_Class.NewRow();
  776. row1["Name"] = ClassName[i].ToString();
  777. row1["Area"] = del;
  778. for (int a = 4; a < data.Columns.Count; a++)
  779. {
  780. row1[a] = CalculationTableColumn(data, data.Columns[a].ColumnName);
  781. }
  782. dt_Class.Rows.Add(row1);
  783. }
  784. //for (int i = 0; i < ClassName.Count; i++)
  785. //{
  786. ////保留当前循环中大类物质,去除其他物质
  787. //DataTable dt = AllAnalysisDetails[0].Copy();
  788. //dt.Clear();
  789. //for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  790. //{
  791. // if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  792. // {
  793. // dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  794. // }
  795. //}
  796. //if (dt.Rows.Count == 0)
  797. // continue;
  798. //if (dt.Rows.Count == 0)
  799. //{
  800. // DataRow dataRow = dt.NewRow();
  801. // dataRow["Area"] = 0;
  802. // dt.Rows.Add(dataRow);
  803. // DataRow dataRow2 = dt_Class.NewRow();
  804. // dataRow2["Name"] = ClassName[i].ToString();
  805. // double ar0 = 0;
  806. // dataRow2["Area"] = ar0;
  807. // dt_Class.Rows.Add(dataRow2);
  808. // continue;
  809. //}
  810. //计算出当前循环中大类物质的面积
  811. // ElementalSubstance = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  812. //DataTable ta = new DataTable();
  813. //ta = dt_Class.Copy();
  814. //ta.Clear();
  815. //for (int a = 0; a < dt.Rows.Count; a++)
  816. //{
  817. // DataTable ClassificationDetails = fielddata.GetAreaByIncA(dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  818. // DataRow dr2 = ta.NewRow();
  819. // foreach (DataRow dr in ClassificationDetails.Rows)
  820. // {
  821. // double doe = Convert.ToDouble(dr["pc"]);
  822. // dr2[dr["Name"].ToString()] = doe;
  823. // }
  824. // ta.Rows.Add(dr2);
  825. //}
  826. //DataTable dataTable = ta.Copy();
  827. //dataTable.Clear();
  828. //DataRow row = dataTable.NewRow();
  829. //dataTable.Rows.Add(row);
  830. //for (int a = 0; a < ta.Columns.Count; a++)
  831. //{
  832. // if (ta.Columns[a].ToString() != "Name" && ta.Columns[a].ToString() != "Class")
  833. // {
  834. // bool bl = false;
  835. // for (int b = 0; b < ta.Rows.Count; b++)
  836. // {
  837. // if (!ta.Rows[b].IsNull(ta.Columns[a].ToString()))
  838. // {
  839. // bl = true;
  840. // }
  841. // }
  842. // if (bl)
  843. // //datatSuncolumn(ta, ta.Columns[a].ToString());
  844. // dataTable.Rows[0][ta.Columns[a].ToString()] = Math.Round(datatSuncolumn(ta, ta.Columns[a].ToString()) / ElementalSubstance, 2);
  845. // }
  846. //}
  847. //dataTable.Rows[0]["Name"] = ClassName[i].ToString();
  848. //dataTable.Rows[0]["Area"] = ElementalSubstance;
  849. //dt_Class.Rows.Add(dataTable.Rows[0].ItemArray);
  850. //}
  851. return dt_Class;
  852. }
  853. private double CalculationTableColumn(DataTable a_data , string a_str)
  854. {
  855. double dl = 0;
  856. if (a_data.Columns.Contains(a_str))
  857. {
  858. for (int i = 0; i < a_data.Rows.Count; i++)
  859. {
  860. if (a_data.Rows[i][a_str].ToString() != "")
  861. {
  862. dl = dl + Convert.ToDouble(a_data.Rows[i][a_str]);
  863. }
  864. }
  865. }
  866. return dl;
  867. }
  868. private double datatSuncolumn(DataTable dt, string str)
  869. {
  870. double sum = 0;
  871. for (int i = 0; i < dt.Rows.Count; i++)
  872. {
  873. if (dt.Rows[i][str].ToString() == "")
  874. {
  875. dt.Rows[i][str] = 0;
  876. }
  877. sum = sum + Convert.ToDouble(dt.Rows[i][str].ToString());
  878. }
  879. return sum;
  880. }
  881. }
  882. }