InclusionProportion.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. using OTSCommon.Model;
  2. using OTSIncAReportApp.DataOperation.DataAccess;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using static OTSIncAReportApp.OTSReport_Export;
  10. namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration
  11. {
  12. /// <summary>
  13. /// 夹杂物占比
  14. /// </summary>
  15. class InclusionProportion
  16. {
  17. /// <summary>
  18. /// 夹杂物数据表
  19. /// </summary>
  20. /// <param name="str"></param>
  21. /// <param name="dt"></param>
  22. public DataTable GetINCAtable(string str, OTSReport_Export m_otsreport_export, c_TemplateClass m_mbszclass)
  23. {
  24. //根据sql条件,查询获取颗粒信息数据
  25. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  26. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  27. List<string> ClassName = new List<string>();
  28. DataTable getClass_dt = fielddata.GetAllClass();
  29. bool bl = false;
  30. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  31. {
  32. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  33. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  34. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  35. {
  36. if (!bl)
  37. {
  38. ClassName.Add("Default");
  39. bl = true;
  40. }
  41. }
  42. else
  43. {
  44. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  45. {
  46. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  47. }
  48. }
  49. }
  50. //夹杂物面积比添加大类
  51. DataTable RawParticleData = InclusionAreaRatio_2(str, m_otsreport_export, m_mbszclass);
  52. //夹杂物面积比计算大类占比
  53. ProportionOfParticleArea(RawParticleData, ClassName, str, out DataTable dt);
  54. return dt;
  55. }
  56. /// <summary>
  57. /// 夹杂物大分类chart数据
  58. /// </summary>
  59. /// <param name="str"></param>
  60. /// <param name="m_mbszclass"></param>
  61. /// <param name="m_otsreport_export"></param>
  62. /// <returns></returns>
  63. public DataTable Get_incaPIC_classify(string str ,c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export)
  64. {
  65. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  66. DataTable m_bt_DBData = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  67. DataTable data;
  68. if (m_mbszclass.list_str_MainPriority.Count==0)
  69. {
  70. data = m_bt_DBData.Copy();
  71. }
  72. else
  73. {
  74. data = m_bt_DBData.Clone();
  75. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  76. {
  77. for (int a = 0; a < m_mbszclass.list_str_MainPriority.Count; a++)
  78. {
  79. if (m_bt_DBData.Rows[i]["TypeName"].ToString() == m_mbszclass.list_str_MainPriority[a])
  80. {
  81. data.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  82. continue;
  83. }
  84. }
  85. }
  86. }
  87. //去除物质分类(非夹杂物分类)
  88. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++)
  89. {
  90. for (int i = data.Rows.Count - 1; i >= 0; i--)
  91. {
  92. if (data.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString())
  93. {
  94. data.Rows.RemoveAt(i);
  95. }
  96. }
  97. }
  98. DataTable AreaInformationOfAllElements = ConSolidateInvalid(data);
  99. DataTable AllAnalysisDetails = new DataTable();
  100. AllAnalysisDetails.Columns.Add("Name");
  101. AllAnalysisDetails.Columns.Add("TypeId");
  102. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  103. AllAnalysisDetails.Columns.Add("Class");
  104. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  105. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  106. {
  107. DataRow dr2 = AllAnalysisDetails.NewRow();
  108. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  109. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  110. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  111. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  112. if (AreaInformationOfAllElements.Rows[i]["GroupName"].ToString() == "")
  113. dr2["Class"] = "Default";
  114. else
  115. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  116. //dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  117. AllAnalysisDetails.Rows.Add(dr2);
  118. }
  119. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  120. List<string> ClassName = new List<string>();
  121. DataTable getClass_dt = fielddata.GetAllClass();
  122. bool bl = false;
  123. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  124. {
  125. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  126. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  127. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  128. {
  129. if (!bl)
  130. {
  131. ClassName.Add("Default");
  132. bl = true;
  133. }
  134. }
  135. else
  136. {
  137. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  138. {
  139. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  140. }
  141. }
  142. }
  143. DataTable AreaRatio = new DataTable();
  144. AreaRatio.TableName = "InclusionAreaRatio";
  145. AreaRatio.Columns.Add("Class");
  146. AreaRatio.Columns.Add("Name");
  147. AreaRatio.Columns.Add("Area", typeof(double));
  148. AreaRatio.Columns.Add("inca_proportion");
  149. AreaRatio.Columns.Add("inca_FieldRatio");
  150. AreaRatio.Columns.Add("Cunt", typeof(int));
  151. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  152. double totalInclusionArea = Convert.ToDouble(decimal.Parse(AllAnalysisDetails.Compute("sum(Area)", "").ToString()));
  153. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  154. {
  155. DataRow dr2 = AreaRatio.NewRow();
  156. dr2["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  157. dr2["Name"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  158. dr2["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  159. dr2["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / totalInclusionArea) * 100, 2);
  160. dr2["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  161. dr2["Cunt"] = AllAnalysisDetails.Rows[i]["Cunt"].ToString();
  162. AreaRatio.Rows.Add(dr2);
  163. }
  164. DataTable AreaRatio_dt = AreaRatio.Copy();
  165. AreaRatio_dt.Clear();
  166. for (int i = 0; i < ClassName.Count(); i++)
  167. {
  168. DataTable dt = AreaRatio.Copy();
  169. dt.Clear();
  170. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  171. {
  172. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  173. {
  174. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  175. }
  176. }
  177. DataView dv = dt.DefaultView;
  178. dv.Sort = "Area DESC";
  179. DataTable dt_Element = dv.ToTable();
  180. for (int a = 0; a < dt_Element.Rows.Count; a++)
  181. {
  182. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  183. }
  184. }
  185. DataTable AllAnalysisDetails1 = AreaRatio_dt.Copy();
  186. AllAnalysisDetails1.Clear();
  187. for (int i = 0; i < ClassName.Count; i++)
  188. {
  189. DataTable dt = AreaRatio_dt.Copy();
  190. dt.Clear();
  191. for (int a = 0; a < AreaRatio_dt.Rows.Count; a++)
  192. {
  193. if (AreaRatio_dt.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  194. {
  195. dt.Rows.Add(AreaRatio_dt.Rows[a].ItemArray);
  196. }
  197. }
  198. if (dt.Rows.Count > 0)
  199. {
  200. double totalInclusionArea2 = Convert.ToDouble(decimal.Parse(AreaRatio_dt.Compute("sum(Area)", "").ToString()));
  201. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  202. int cunt = Convert.ToInt32(decimal.Parse(dt.Compute("sum(Cunt)", "").ToString()));
  203. DataRow dr3 = AllAnalysisDetails1.NewRow();
  204. dr3["Class"] = ClassName[i].ToString();
  205. dr3["Area"] = Math.Round(Area, 2);
  206. dr3["inca_proportion"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / totalInclusionArea2) * 100, 2);
  207. dr3["inca_FieldRatio"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  208. dr3["Cunt"] = cunt;
  209. AllAnalysisDetails1.Rows.Add(dr3);
  210. }
  211. }
  212. return AllAnalysisDetails1;
  213. }
  214. /// <summary>
  215. /// 夹杂物细分类chart数据
  216. /// </summary>
  217. /// <param name="m_mbszclass"></param>
  218. /// <param name="m_otsreport_export"></param>
  219. /// <returns></returns>
  220. public DataTable Get_incaPIC_subdivision(c_TemplateClass m_mbszclass,OTSReport_Export m_otsreport_export)
  221. {
  222. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  223. DataTable m_bt_DBData = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  224. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  225. List<string> ClassName = new List<string>();
  226. DataTable getClass_dt = fielddata.GetAllClass();
  227. bool bl = false;
  228. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  229. {
  230. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  231. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  232. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  233. {
  234. if (!bl)
  235. {
  236. ClassName.Add("Default");
  237. bl = true;
  238. }
  239. }
  240. else
  241. {
  242. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  243. {
  244. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  245. }
  246. }
  247. }
  248. DataTable dataTable = m_bt_DBData.Clone();
  249. for (int i=0;i< m_bt_DBData.Rows.Count;i++)
  250. {
  251. for (int a=0;a< ClassName.Count;a++)
  252. {
  253. if (m_bt_DBData.Rows[i]["GroupName"].ToString()== ClassName[a].ToString())
  254. {
  255. dataTable.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  256. }
  257. }
  258. }
  259. if (m_mbszclass.list_str_MainPriority.Count==0)
  260. {
  261. return ConSolidateInvalid(dataTable);
  262. }
  263. DataTable data = m_bt_DBData.Clone();
  264. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  265. {
  266. for (int a = 0; a < m_mbszclass.list_str_MainPriority.Count; a++)
  267. {
  268. if (m_bt_DBData.Rows[i]["TypeName"].ToString() == m_mbszclass.list_str_MainPriority[a])
  269. {
  270. data.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  271. continue;
  272. }
  273. }
  274. }
  275. return ConSolidateInvalid(dataTable);
  276. }
  277. /// <summary>
  278. /// 判断是否有大分类,有为true
  279. /// </summary>
  280. /// <param name="m_otsreport_export"></param>
  281. /// <returns></returns>
  282. public bool IsThereAMajorClassification(OTSReport_Export m_otsreport_export)
  283. {
  284. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  285. DataTable getClass_dt = fielddata.GetAllClass();
  286. List<string> ClassName = new List<string>();
  287. bool bl = false;
  288. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  289. {
  290. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  291. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  292. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  293. {
  294. if (!bl)
  295. {
  296. ClassName.Add("Default");
  297. bl = true;
  298. }
  299. }
  300. else
  301. {
  302. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  303. {
  304. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  305. }
  306. }
  307. }
  308. if (ClassName.Count < 2)
  309. {
  310. return false;
  311. }
  312. else
  313. {
  314. return true;
  315. }
  316. }
  317. private DataTable ConSolidateInvalid(DataTable dt)
  318. {
  319. DataTable dt_invalid = dt.Clone();
  320. DataTable dt_no_invalid = dt.Clone();
  321. for (int i = 0; i < dt.Rows.Count; i++)
  322. {
  323. if (dt.Rows[i]["TypeName"].ToString() == "Invalid")
  324. {
  325. dt_invalid.Rows.Add(dt.Rows[i].ItemArray);
  326. }
  327. else
  328. {
  329. dt_no_invalid.Rows.Add(dt.Rows[i].ItemArray);
  330. }
  331. }
  332. return dt_no_invalid;
  333. }
  334. private DataTable GetParticleListForParticlSize(DataTable data, DataTable table)
  335. {
  336. DataTable dt_Partick = new DataTable();
  337. dt_Partick.Columns.Add("TypeId");
  338. dt_Partick.Columns.Add("TypeName");
  339. dt_Partick.Columns.Add("TypeColor");
  340. dt_Partick.Columns.Add("con");
  341. dt_Partick.Columns.Add("ar");
  342. dt_Partick.Columns.Add("max");
  343. dt_Partick.Columns.Add("Area", typeof(double));
  344. dt_Partick.Columns.Add("GroupName");
  345. List<string> typeName = new List<string>();
  346. for (int i = 0; i < data.Rows.Count; i++)
  347. {
  348. typeName.Add(data.Rows[i]["TypeId"].ToString());
  349. }
  350. typeName = typeName.Distinct().ToList();
  351. for (int i = 0; i < typeName.Count; i++)
  352. {
  353. DataTable dt = dt_Partick.Clone();
  354. for (int j = 0; j < data.Rows.Count; j++)
  355. {
  356. if (typeName[i].ToString() == data.Rows[j]["TypeId"].ToString())
  357. {
  358. DataRow row = dt.NewRow();
  359. row["TypeId"] = data.Rows[j]["TypeId"];
  360. row["TypeName"] = data.Rows[j]["TypeName"];
  361. row["TypeColor"] = data.Rows[j]["TypeColor"];
  362. row["Area"] = data.Rows[j]["Area"];
  363. dt.Rows.Add(row);
  364. }
  365. }
  366. DataRow dr = dt_Partick.NewRow();
  367. dr["TypeId"] = dt.Rows[0]["TypeId"].ToString();
  368. dr["TypeName"] = dt.Rows[0]["TypeName"].ToString();
  369. dr["TypeColor"] = dt.Rows[0]["TypeColor"].ToString();
  370. dr["con"] = dt.Rows.Count;
  371. dr["ar"] = dt.Compute("min(Area)", "");
  372. dr["max"] = dt.Compute("Max(Area)", "");
  373. dr["Area"] = dt.Compute("SUM(Area)", "");
  374. dt_Partick.Rows.Add(dr);
  375. }
  376. for (int i = 0; i < dt_Partick.Rows.Count; i++)
  377. {
  378. for (int j = 0; j < table.Rows.Count; j++)
  379. {
  380. if (dt_Partick.Rows[i]["TypeId"].ToString() == table.Rows[j]["TypeId"].ToString())
  381. {
  382. dt_Partick.Rows[i]["GroupName"] = table.Rows[j]["GroupName"];
  383. break;
  384. }
  385. }
  386. }
  387. return dt_Partick;
  388. }
  389. private DataTable InclusionAreaRatio_2(string str, OTSReport_Export m_otsreport_export, c_TemplateClass m_mbszclass)
  390. {
  391. //根据sql条件,查询获取颗粒信息数据
  392. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  393. DataTable m_bt_DBData = InvalidRemoval(fielddata.GetAreaByAllIncA(""));
  394. DataTable AreaInformationOfAllElements;
  395. if (m_mbszclass.list_str_MainPriority.Count==0)
  396. {
  397. AreaInformationOfAllElements = m_bt_DBData.Copy();
  398. }
  399. else
  400. {
  401. AreaInformationOfAllElements = m_bt_DBData.Clone();
  402. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  403. {
  404. for (int a = 0; a < m_mbszclass.list_str_MainPriority.Count; a++)
  405. {
  406. if (m_bt_DBData.Rows[i]["TypeName"].ToString() == m_mbszclass.list_str_MainPriority[a])
  407. {
  408. AreaInformationOfAllElements.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  409. continue;
  410. }
  411. }
  412. }
  413. }
  414. //去除物质分类(非夹杂物分类)
  415. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++)
  416. {
  417. for (int i = AreaInformationOfAllElements.Rows.Count - 1; i >= 0; i--)
  418. {
  419. if (AreaInformationOfAllElements.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString())
  420. {
  421. AreaInformationOfAllElements.Rows.RemoveAt(i);
  422. }
  423. }
  424. }
  425. DataTable AllAnalysisDetails = new DataTable();
  426. AllAnalysisDetails.Columns.Add("Name");
  427. AllAnalysisDetails.Columns.Add("TypeId");
  428. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  429. AllAnalysisDetails.Columns.Add("Class");
  430. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  431. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  432. {
  433. DataRow dr2 = AllAnalysisDetails.NewRow();
  434. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  435. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  436. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  437. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  438. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  439. AllAnalysisDetails.Rows.Add(dr2);
  440. }
  441. List<string> ClassName = new List<string>();
  442. DataTable getClass_dt = fielddata.GetAllClass();
  443. bool bl = false;
  444. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  445. {
  446. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  447. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  448. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  449. {
  450. if (!bl)
  451. {
  452. ClassName.Add("Default");
  453. bl = true;
  454. }
  455. }
  456. else
  457. {
  458. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  459. {
  460. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  461. }
  462. }
  463. }
  464. DataTable AreaRatio = new DataTable();
  465. AreaRatio.TableName = "InclusionAreaRatio";
  466. AreaRatio.Columns.Add("Class");
  467. AreaRatio.Columns.Add("subdivision");
  468. AreaRatio.Columns.Add("Area", typeof(double));
  469. AreaRatio.Columns.Add("inca_proportion");
  470. AreaRatio.Columns.Add("inca_FieldRatio");
  471. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  472. int sumArea = 0;
  473. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  474. {
  475. sumArea = sumArea + Convert.ToInt32(AllAnalysisDetails.Rows[i]["Area"]);
  476. }
  477. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  478. {
  479. DataRow dr = AreaRatio.NewRow();
  480. //dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  481. if (AllAnalysisDetails.Rows[i]["Class"].ToString() == "")
  482. dr["Class"] = "Default";
  483. else
  484. dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  485. dr["subdivision"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  486. dr["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  487. dr["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / sumArea) * 100, 2);
  488. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  489. AreaRatio.Rows.Add(dr);
  490. }
  491. DataTable AreaRatio_dt = AreaRatio.Copy();
  492. AreaRatio_dt.Clear();
  493. for (int i = 0; i < ClassName.Count(); i++)
  494. {
  495. DataTable dt = AreaRatio.Copy();
  496. dt.Clear();
  497. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  498. {
  499. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  500. {
  501. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  502. }
  503. }
  504. DataView dv = dt.DefaultView;
  505. dv.Sort = "Area DESC";
  506. DataTable dt_Element = dv.ToTable();
  507. for (int a = 0; a < dt_Element.Rows.Count; a++)
  508. {
  509. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  510. }
  511. }
  512. return AreaRatio_dt;
  513. }
  514. private bool ProportionOfParticleArea(DataTable dataTable, List<string> ClassName, string str, out DataTable dt_out)
  515. {
  516. DataTable AllAnalysisDetails = dataTable.Copy();
  517. AllAnalysisDetails.Clear();
  518. AllAnalysisDetails.TableName = "InclusionAreaRatio";
  519. for (int i = 0; i < ClassName.Count; i++)
  520. {
  521. DataTable dt = dataTable.Copy();
  522. dt.Clear();
  523. for (int a = 0; a < dataTable.Rows.Count; a++)
  524. {
  525. if (dataTable.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  526. {
  527. dt.Rows.Add(dataTable.Rows[a].ItemArray);
  528. }
  529. }
  530. if (dt.Rows.Count > 0)
  531. {
  532. double totalInclusionArea = Convert.ToDouble(decimal.Parse(dataTable.Compute("sum(Area)", "").ToString()));
  533. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  534. DataRow dr = AllAnalysisDetails.NewRow();
  535. dr["Class"] = ClassName[i].ToString();
  536. dr["Area"] = Math.Round(Area, 2);
  537. //Convert.ToDouble(decimal.Parse(dt.Compute("sum(e3)", "").ToString()));
  538. dr["inca_proportion"] = Math.Round((Convert.ToDouble(Area) / totalInclusionArea) * 100, 2);
  539. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(Area) / Convert.ToDouble(str)) * 100, 4);
  540. AllAnalysisDetails.Rows.Add(dr);
  541. DataView dv = dt.DefaultView;
  542. dv.Sort = "Area DESC";
  543. DataTable dt_Area = dv.ToTable();
  544. for (int a = 0; a < dt_Area.Rows.Count; a++)
  545. {
  546. dt_Area.Rows[a]["Class"] = "";
  547. dt_Area.Rows[a]["Area"] = Math.Round(Convert.ToDouble(dt_Area.Rows[a]["Area"]), 2);
  548. AllAnalysisDetails.Rows.Add(dt_Area.Rows[a].ItemArray);
  549. }
  550. }
  551. }
  552. dt_out = AllAnalysisDetails.Copy();
  553. return true;
  554. }
  555. private DataTable InvalidRemoval(DataTable dt)
  556. {
  557. DataTable dataTable = dt.Copy();
  558. dataTable.Clear();
  559. for (int i = 0; i < dt.Rows.Count; i++)
  560. {
  561. if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 10)
  562. {
  563. dataTable.Rows.Add(dt.Rows[i].ItemArray);
  564. }
  565. }
  566. return dataTable;
  567. }
  568. }
  569. }