版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1408 line
61 KiB

  1. using Devart.Data;
  2. using MaiMuAOI.SysCtrl;
  3. using MaiMuAOI.SysUI.ProductAndStep;
  4. using MaiMuControl.SysStatusMgr.UserMgr;
  5. using Microsoft.Office.Interop.Excel;
  6. using Models;
  7. using Newtonsoft.Json;
  8. using Newtonsoft.Json.Linq;
  9. using OpenCvSharp.Flann;
  10. using SqlSugar;
  11. using System;
  12. using System.Collections;
  13. using System.Collections.Generic;
  14. using System.ComponentModel;
  15. using System.Data;
  16. using System.Data.Common;
  17. using System.Drawing;
  18. using System.Dynamic;
  19. using System.IO;
  20. using System.Linq;
  21. using System.Reflection;
  22. using System.Runtime.InteropServices.ComTypes;
  23. using System.Runtime.Serialization;
  24. using System.Text;
  25. using System.Threading.Tasks;
  26. using System.Web.Routing;
  27. using System.Web.UI.WebControls;
  28. using System.Windows.Forms;
  29. using static MaiMuControl.Form1;
  30. using DataTable = System.Data.DataTable;
  31. using Point = System.Drawing.Point;
  32. using Excel = Microsoft.Office.Interop.Excel;
  33. namespace MaiMuAOI.SysUI.DefectPicShow
  34. {
  35. public partial class DataQueryFrm : Form
  36. {
  37. Service.OrderService OrderService = new Service.OrderService();
  38. List<Order> QueryOrders = new List<Order>();
  39. List<Order> QueryAllOrders = new List<Order>();
  40. public DataQueryFrm()
  41. {
  42. InitializeComponent();
  43. UIStyle.SetUIStyle(this);
  44. this.uiTitel1.FatherForm = this;
  45. }
  46. private void DataQueryFrm_Load(object sender, EventArgs e)
  47. {
  48. LoadPdtList(SysMgr.Instance.ProductCodeList);
  49. //激活OnPageChanged事件
  50. pageCtrl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
  51. }
  52. #region 切页
  53. /// <summary>
  54. /// 页数变化时调用绑定数据方法
  55. /// </summary>
  56. /// <param name="sender"></param>
  57. /// <param name="e"></param>
  58. private void pagerControl1_OnPageChanged(object sender, EventArgs e)
  59. {
  60. QueryData();
  61. }
  62. #endregion
  63. #region 加载料号
  64. private string[] pdtlistData;
  65. private void LoadPdtList(List<string> list)
  66. {
  67. this.cbProductCode.Items.Clear();
  68. this.pdtlistData = list.ToArray();
  69. cbProductCode.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些
  70. cbProductCode.TextUpdate += cobList_TextUpdate;//重新绑定事件
  71. cbProductCode.KeyDown += CobList_KeyDown;
  72. this.cbProductCode.Text = "";
  73. cbProductCode.Focus();
  74. cbProductCode.SelectAll();
  75. }
  76. private void CobList_KeyDown(object sender, KeyEventArgs e)
  77. {
  78. ComboBox ctrl = sender as ComboBox;
  79. if (e.KeyCode == Keys.Enter)
  80. {
  81. if (ctrl.Items.Count == 1)
  82. ctrl.Text = ctrl.Items[0].ToString();
  83. }
  84. }
  85. private void cobList_TextUpdate(object sender, EventArgs e)
  86. {
  87. ComboBox ctrl = sender as ComboBox;
  88. if (ctrl.Text != null)
  89. {
  90. string str = ctrl.Text; //获取cb_material控件输入内
  91. //清空combobox
  92. ctrl.DataSource = null;
  93. ctrl.Items.Clear();
  94. string[] workOrderFiltered;
  95. workOrderFiltered = pdtlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写
  96. ctrl.Items.AddRange(workOrderFiltered);//比使用DataSource速度要快一些
  97. // 不存在符合条件时
  98. //设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  99. ctrl.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
  100. if (workOrderFiltered.Length > 0)
  101. {
  102. if (!ctrl.DroppedDown)
  103. ctrl.DroppedDown = true; // 自动弹出下拉框
  104. }
  105. ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  106. }
  107. }
  108. #endregion
  109. #region 查询数据
  110. #region 数据库查询
  111. private class domainItem
  112. {
  113. public string FieldName { get; set; }
  114. public string FieldValue { get; set; }
  115. public int ConditionalType { get; set; }
  116. }
  117. private class QueryOrderData
  118. {
  119. public string model { get; set; }
  120. public string fields { get; set; }
  121. public List<domainItem> domain { get; set; }
  122. public string order { get; set; }
  123. public int pageNum { get; set; }
  124. public int pageSize { get; set; }
  125. }
  126. private List<Order> getTableList(JObject req, out int TotalCnt)
  127. {
  128. try
  129. {
  130. string model, fields = "", domain = "", order = "";
  131. int pageNum = 0, pageSize = 0, totalCount = 0;
  132. model = req.Value<string>("model");
  133. if (req.ContainsKey("fields")) fields = req.Value<string>("fields");
  134. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  135. if (req.ContainsKey("order")) order = req.Value<string>("order");
  136. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  137. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  138. //创建表达式
  139. var exp1 = Expressionable.Create<Order>()
  140. //.AndIF((int)cobProductList.SelectedValue > 0, it => it.ProductId == (int)cobProductList.SelectedValue)
  141. //.AndIF((int)cobStepList.SelectedValue > 0, it => it.StepId == (int)cobStepList.SelectedValue)
  142. //.AndIF(dateTimePicker1.Checked, it => it.CreateTime >= dateTimePicker1.Value)
  143. //.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value)
  144. .ToExpression();//注意 这一句 不能少
  145. var list = OrderService.GetListEx(fields, domain, order, pageNum, pageSize, ref totalCount);
  146. TotalCnt = totalCount;
  147. //var list = svcOrder.GetListNav(pageNum, pageSize, ref totalCount, exp1);
  148. return list;
  149. }
  150. catch (Exception ex)
  151. {
  152. ;
  153. }
  154. TotalCnt = 0;
  155. return null;
  156. }
  157. #endregion
  158. #region 新老流程数据分析
  159. private void ShowDataTableEx(List<Order> list)
  160. {
  161. dataGridView1.Columns.Clear();
  162. //记录数据类型列数
  163. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  164. DataTable dt = new DataTable(); //建立个数据表
  165. //通用列
  166. DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
  167. chk.Name = "Select";
  168. chk.HeaderText = "选择";
  169. dataGridView1.Columns.Add(chk);
  170. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  171. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  172. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  173. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  174. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  175. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  176. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  177. dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  178. dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  179. dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  180. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  181. foreach(var item in list)
  182. {
  183. //老流程
  184. if(item.StepInfo == null ||item.StepInfo.ProcessType != "快速流程")
  185. {
  186. //加入数据表
  187. if(item.SizeDefectInfoList == null)
  188. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  189. #region 张力
  190. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  191. {
  192. PointCode = "Tension",
  193. StepName = "张力",
  194. Data = item.Tension1,
  195. });
  196. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  197. {
  198. PointCode = "Tension",
  199. StepName = "张力",
  200. Data = item.Tension2,
  201. });
  202. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  203. {
  204. PointCode = "Tension",
  205. StepName = "张力",
  206. Data = item.Tension3,
  207. });
  208. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  209. {
  210. PointCode = "Tension",
  211. StepName = "张力",
  212. Data = item.Tension4,
  213. });
  214. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  215. {
  216. PointCode = "Tension",
  217. StepName = "张力",
  218. Data = item.Tension5,
  219. });
  220. #endregion
  221. #region 厚度
  222. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  223. {
  224. PointCode = "Height",
  225. StepName = "厚度",
  226. Data = item.Height1,
  227. });
  228. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  229. {
  230. PointCode = "Height",
  231. StepName = "厚度",
  232. Data = item.Height2,
  233. });
  234. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  235. {
  236. PointCode = "Height",
  237. StepName = "厚度",
  238. Data = item.Height3,
  239. });
  240. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  241. {
  242. PointCode = "Height",
  243. StepName = "厚度",
  244. Data = item.Height4,
  245. });
  246. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  247. {
  248. PointCode = "Height",
  249. StepName = "厚度",
  250. Data = item.Height5,
  251. });
  252. #endregion
  253. #region YPT
  254. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  255. {
  256. PointCode = "Y轴方向PT值检测",
  257. StepName = "Y轴方向PT值检测",
  258. Data = item.PT1,
  259. });
  260. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  261. {
  262. PointCode = "Y轴方向PT值检测",
  263. StepName = "Y轴方向PT值检测",
  264. Data = item.PT2,
  265. });
  266. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  267. {
  268. PointCode = "Y轴方向PT值检测",
  269. StepName = "Y轴方向PT值检测",
  270. Data = item.PT3,
  271. });
  272. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  273. {
  274. PointCode = "Y轴方向PT值检测",
  275. StepName = "Y轴方向PT值检测",
  276. Data = item.PT5,
  277. });
  278. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  279. {
  280. PointCode = "Y轴方向PT值检测",
  281. StepName = "Y轴方向PT值检测",
  282. Data = item.PT6,
  283. });
  284. #endregion
  285. #region 线宽
  286. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  287. {
  288. PointCode = "线宽正面",
  289. StepName = "线宽正面",
  290. Data = item.LineWidth1,
  291. });
  292. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  293. {
  294. PointCode = "线宽正面",
  295. StepName = "线宽正面",
  296. Data = item.LineWidth2,
  297. });
  298. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  299. {
  300. PointCode = "线宽正面",
  301. StepName = "线宽正面",
  302. Data = item.LineWidth3,
  303. });
  304. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  305. {
  306. PointCode = "线宽正面",
  307. StepName = "线宽正面",
  308. Data = item.LineWidth4,
  309. });
  310. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  311. {
  312. PointCode = "线宽正面",
  313. StepName = "线宽正面",
  314. Data = item.LineWidth5,
  315. });
  316. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  317. {
  318. PointCode = "线宽正面",
  319. StepName = "线宽正面",
  320. Data = item.LineWidth6,
  321. });
  322. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  323. {
  324. PointCode = "线宽正面",
  325. StepName = "线宽正面",
  326. Data = item.LineWidth7,
  327. });
  328. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  329. {
  330. PointCode = "线宽正面",
  331. StepName = "线宽正面",
  332. Data = item.LineWidth8,
  333. });
  334. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  335. {
  336. PointCode = "线宽正面",
  337. StepName = "线宽正面",
  338. Data = item.LineWidth9,
  339. });
  340. #endregion
  341. #region 缺陷
  342. if (item.DefectCntInfoList == null)
  343. item.DefectCntInfoList = new List<DefectCntInfo>();
  344. item.DefectCntInfoList.Add(new DefectCntInfo()
  345. {
  346. Name = "堵孔",
  347. Code = "dk",
  348. DefectCnt = item.DKCount,
  349. });
  350. item.DefectCntInfoList.Add(new DefectCntInfo()
  351. {
  352. Name = "脏污",
  353. Code = "zw",
  354. DefectCnt = item.ZWCount,
  355. });
  356. item.DefectCntInfoList.Add(new DefectCntInfo()
  357. {
  358. Name = "钢丝异常",
  359. Code = "gsyc",
  360. DefectCnt = item.GSYCCount,
  361. });
  362. item.DefectCntInfoList.Add(new DefectCntInfo()
  363. {
  364. Name = "缺口",
  365. Code = "qk",
  366. DefectCnt = item.QKCount,
  367. });
  368. item.DefectCntInfoList.Add(new DefectCntInfo()
  369. {
  370. Name = "纤维丝",
  371. Code = "xws",
  372. DefectCnt = item.XWSCount,
  373. });
  374. item.DefectCntInfoList.Add(new DefectCntInfo()
  375. {
  376. Name = "针孔",
  377. Code = "zk",
  378. DefectCnt = item.ZKCount,
  379. });
  380. item.DefectCntInfoList.Add(new DefectCntInfo()
  381. {
  382. Name = "泡泡",
  383. Code = "pp",
  384. DefectCnt = item.PPCount,
  385. });
  386. item.DefectCntInfoList.Add(new DefectCntInfo()
  387. {
  388. Name = "压线",
  389. Code = "yx",
  390. DefectCnt = item.YXCount,
  391. });
  392. item.DefectCntInfoList.Add(new DefectCntInfo()
  393. {
  394. Name = "划伤",
  395. Code = "hs",
  396. DefectCnt = item.HSCount,
  397. });
  398. item.DefectCntInfoList.Add(new DefectCntInfo()
  399. {
  400. Name = "斜边",
  401. Code = "xb",
  402. DefectCnt = item.XBCount,
  403. });
  404. item.DefectCntInfoList.Add(new DefectCntInfo()
  405. {
  406. Name = "栅线",
  407. Code = "sx",
  408. DefectCnt = item.SXCount,
  409. });
  410. #endregion
  411. if (!dataCnt.ContainsKey("张力"))
  412. dataCnt.Add("张力", 5);
  413. else
  414. if (dataCnt["张力"] < 5)
  415. dataCnt["张力"] = 5;
  416. if (!dataCnt.ContainsKey("厚度"))
  417. dataCnt.Add("厚度", 5);
  418. else
  419. if (dataCnt["厚度"] < 5)
  420. dataCnt["厚度"] = 5;
  421. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  422. dataCnt.Add("Y轴方向PT值检测", 5);
  423. else
  424. if (dataCnt["Y轴方向PT值检测"] < 5)
  425. dataCnt["Y轴方向PT值检测"] = 5;
  426. if (!dataCnt.ContainsKey("线宽正面"))
  427. dataCnt.Add("线宽正面", 9);
  428. else
  429. if (dataCnt["线宽正面"] < 9)
  430. dataCnt["线宽正面"] = 9;
  431. }
  432. else
  433. {
  434. //按照步骤流程分类
  435. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  436. for (int i = 0; i < pointType.Length; i++)
  437. {
  438. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i] && !q.isAverage).ToList();
  439. if (t.Count > 0)
  440. {
  441. //当前测试项数据个数
  442. if (!dataCnt.ContainsKey(pointType[i]))
  443. dataCnt.Add(pointType[i], t.Count);
  444. else
  445. if (dataCnt[pointType[i]] < t.Count)
  446. dataCnt[pointType[i]] = t.Count;
  447. }
  448. }
  449. }
  450. }
  451. //插入列
  452. foreach (var item in dataCnt)
  453. {
  454. //按步骤名称插入列
  455. for (int i = 0; i < item.Value; i++)
  456. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  457. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  458. }
  459. foreach(var item in ConfMgr.Instance.DefectItemParamsList)
  460. if(item.Show == 1)
  461. dt.Columns.Add(new DataColumn(item.Name + "数量", typeof(int)));//在表中添加int类型的列
  462. //插入按钮
  463. dataGridView1.DataSource = dt;
  464. //在datagridview中添加button按钮
  465. //DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
  466. //btn.Name = "Modify";
  467. //btn.HeaderText = "操作";
  468. //btn.DefaultCellStyle.NullValue = "修改";
  469. //dataGridView1.Columns.Add(btn);
  470. //DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
  471. //btn2.Name = "HistoryView";
  472. //btn2.HeaderText = "查看";
  473. //btn2.DefaultCellStyle.NullValue = "历史";
  474. //dataGridView1.Columns.Add(btn2);
  475. DataGridViewButtonColumn btn3 = new DataGridViewButtonColumn();
  476. btn3.Name = "Distribution";
  477. btn3.HeaderText = "缺陷分布";
  478. btn3.DefaultCellStyle.NullValue = "分布";
  479. dataGridView1.Columns.Add(btn3);
  480. DataTable dts = (DataTable)dataGridView1.DataSource;
  481. dts.Clear();
  482. List<Point> FailPoint = new List<Point>();
  483. int row_index = 0;
  484. int col_index = 9;
  485. foreach (var item in list)
  486. {
  487. //新增
  488. DataRow dr;//行
  489. dr = dts.NewRow();
  490. //dr["选择"] = false;
  491. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  492. dr["检测单号"] = item.DetectOrder;
  493. dr["产品名称"] = item.ProductInfo.Name;
  494. dr["料号"] = item.ProductInfo.Code;
  495. dr["网版编码"] = item.SN;
  496. dr["批次"] = item.BatchId;
  497. dr["合格"] = item.Qualified ? "合格": "不合格";
  498. dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  499. dr["异常情况"] = item.Abnormalities;
  500. dr["修复人员"] = item.RepairCode;
  501. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  502. //老流程
  503. //if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  504. //{
  505. //}
  506. //else
  507. {
  508. //根据不同步骤名称插入数据
  509. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  510. foreach (var tdata in dataCnt)
  511. {
  512. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  513. List<double> dataList = new List<double>();
  514. int data_index = 0;
  515. for (int i = 0; i < tempd.Count; i++)
  516. {
  517. if (tempd[i].isAverage == false)
  518. {
  519. dataList.Add(tempd[i].Data);
  520. dr[$"{tdata.Key}-{data_index + 1}"] = tempd[i].Data.ToString("0.0000");
  521. data_index++;
  522. }
  523. //不合格数据添加队列
  524. if (i + 1 == tempd.Count)
  525. col_index = this.dataGridView1.Columns[$"{tdata.Key}均值"].Index;
  526. else
  527. col_index = this.dataGridView1.Columns[$"{tdata.Key}-{data_index}"].Index;
  528. if (tempd[i].result == 2)
  529. FailPoint.Add(new Point(row_index, col_index));
  530. }
  531. if (dataList.Count > 0)
  532. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  533. else
  534. dr[$"{tdata.Key}均值"] = "0";
  535. }
  536. foreach (var defItem in ConfMgr.Instance.DefectItemParamsList)
  537. {
  538. if (defItem.Show == 1)
  539. {
  540. if (item.DefectCntInfoList != null)
  541. {
  542. var fd = item.DefectCntInfoList.Find(x => x.Name == defItem.Name);
  543. if (fd != null)
  544. dr[defItem.Name + "数量"] = fd.DefectCnt;
  545. else
  546. dr[defItem.Name + "数量"] = 0;
  547. }
  548. else
  549. dr[defItem.Name + "数量"] = 0;
  550. }
  551. }
  552. }
  553. dts.Rows.Add(dr);//在表的对象的行里添加此行
  554. row_index++;
  555. }
  556. //dts.DefaultView.Sort = "时间戳 desc";
  557. //dts = dts.DefaultView.ToTable();
  558. dataGridView1.DataSource = dts;
  559. this.dataGridView1.Columns[0].Width = 50;
  560. this.dataGridView1.Columns[1].Width = 120;
  561. for (int i = 0; i < 12; i++) //去除3列
  562. {
  563. this.dataGridView1.Columns[i].Frozen = true;
  564. }
  565. for (int i = 0; i < FailPoint.Count; i++)
  566. {
  567. DataGridViewCell aa = dataGridView1.Rows[FailPoint[i].X].Cells[FailPoint[i].Y];
  568. aa.Style.ForeColor = Color.Red;
  569. //aa.Style.BackColor = Color.LightGreen;
  570. }
  571. return;
  572. }
  573. #endregion
  574. private void QueryData()
  575. {
  576. QueryOrderData queryOrderData = new QueryOrderData();
  577. queryOrderData.model = "order";
  578. queryOrderData.fields = "*";
  579. queryOrderData.order = "id desc";
  580. queryOrderData.pageNum = this.pageCtrl1.PageIndex;
  581. queryOrderData.pageSize = this.pageCtrl1.PageSize;
  582. queryOrderData.domain = new List<domainItem>();
  583. domainItem startTime = new domainItem();
  584. startTime.FieldName = "CreateTime";
  585. startTime.FieldValue = dateTimePicker1.Value.ToString("yyyy-M-d");
  586. startTime.ConditionalType = 3;
  587. queryOrderData.domain.Add(startTime);
  588. domainItem endTime = new domainItem();
  589. endTime.FieldName = "CreateTime";
  590. endTime.FieldValue = dateTimePicker2.Value.ToString("yyyy-M-d") + " 23:59:59";
  591. endTime.ConditionalType = 5;
  592. queryOrderData.domain.Add(endTime);
  593. //OrderService.GetList
  594. //产品条件
  595. if (!string.IsNullOrEmpty(cbProductCode.Text))
  596. {
  597. domainItem ProductCode = new domainItem();
  598. ProductCode.FieldName = "ProductId";
  599. ProductCode.FieldValue = SysMgr.Instance.ProductIdList[cbProductCode.SelectedIndex].ToString();
  600. ProductCode.ConditionalType = 6;
  601. queryOrderData.domain.Add(ProductCode);
  602. }
  603. //合格条件
  604. if (!string.IsNullOrEmpty(comboBox2.Text))
  605. {
  606. domainItem CompareResult = new domainItem();
  607. CompareResult.FieldName = "Qualified";
  608. CompareResult.FieldValue = comboBox2.Text == "合格"? "1":"0";
  609. CompareResult.ConditionalType = 0;
  610. queryOrderData.domain.Add(CompareResult);
  611. }
  612. //比对条件
  613. if (!string.IsNullOrEmpty(comboBox1.Text))
  614. {
  615. domainItem CompareResultOptions = new domainItem();
  616. CompareResultOptions.FieldName = "CompareResult";
  617. CompareResultOptions.FieldValue = comboBox1.Text == "通过" ? "1" : comboBox1.Text == "未通过" ? "2" : "0";
  618. CompareResultOptions.ConditionalType = 0;
  619. queryOrderData.domain.Add(CompareResultOptions);
  620. }
  621. //异常条件
  622. if (!string.IsNullOrEmpty(comboBox3.Text))
  623. {
  624. domainItem State = new domainItem();
  625. State.FieldName = "State";
  626. State.FieldValue = comboBox3.Text == "修复" ? "5" : comboBox3.Text == "未修复" ? "0" : "10";
  627. State.ConditionalType = 0;
  628. queryOrderData.domain.Add(State);
  629. }
  630. int totalcnt = 0;
  631. JObject str = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  632. var list = getTableList(str, out totalcnt);
  633. this.pageCtrl1.DrawControl(totalcnt);
  634. QueryOrders = list;
  635. //自动生成表格
  636. ShowDataTableEx(list);
  637. //总数居
  638. queryOrderData.pageNum = 0;
  639. queryOrderData.pageSize = 0;
  640. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  641. var list2 = getTableList(str2, out totalcnt);
  642. QueryAllOrders = list2;
  643. }
  644. private void skinButton2_Click(object sender, EventArgs e)
  645. {
  646. pageCtrl1.PageIndex = 1;
  647. QueryData();
  648. }
  649. #endregion
  650. #region 表格单击
  651. #region 更新数据
  652. #endregion
  653. private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  654. {
  655. int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
  656. if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "操作")
  657. {
  658. //修改数据
  659. AmendantRecordFrm recordFrm = new AmendantRecordFrm(QueryOrders[Index]);
  660. recordFrm.ShowDialog();
  661. //重新显示
  662. QueryData();
  663. }
  664. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "查看")
  665. {
  666. //查看历史
  667. HistoryViewFrm Frm = new HistoryViewFrm(QueryOrders[Index]);
  668. Frm.ShowDialog();
  669. }
  670. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "缺陷分布")
  671. {
  672. //缺陷分布
  673. DistributionFrm Frm = new DistributionFrm(QueryOrders[Index]);
  674. Frm.WindowState = FormWindowState.Maximized;
  675. Frm.ShowDialog();
  676. }
  677. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "选择")
  678. {
  679. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[Index].Cells[0];
  680. Boolean flag = Convert.ToBoolean(checkCell.Value);
  681. if (flag == true) //查找被选择的数据行
  682. {
  683. checkCell.Value = false;
  684. }
  685. else
  686. checkCell.Value = true;
  687. }
  688. }
  689. #endregion
  690. #region 界面调整
  691. private void DataQueryFrm_SizeChanged(object sender, EventArgs e)
  692. {
  693. if (this.WindowState == FormWindowState.Maximized)
  694. {
  695. this.WindowState = FormWindowState.Normal;
  696. this.Top = 0;
  697. this.Left = 0;
  698. this.Width = SystemInformation.WorkingArea.Width;
  699. this.Height = SystemInformation.WorkingArea.Height;
  700. }
  701. }
  702. #endregion
  703. #region 删除
  704. private int delTableList(JObject req)
  705. {
  706. JObject res = new JObject();
  707. try
  708. {
  709. string model = req.Value<string>("model");
  710. string domain = req.Value<JArray>("domain").ToString();
  711. //var idArr = req.Value<JArray>("idList");
  712. //List<int> ids = new List<int>();
  713. //foreach (int id in idArr) ids.Add(id);
  714. int result = OrderService.DeleteList(model, domain);
  715. return 1;
  716. }
  717. catch (Exception ex)
  718. {
  719. }
  720. return 0;
  721. }
  722. private void skinButton3_Click(object sender, EventArgs e)
  723. {
  724. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  725. {
  726. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0];
  727. Boolean flag = Convert.ToBoolean(checkCell.Value);
  728. if(flag == true)
  729. {
  730. QueryOrderData delOrderData = new QueryOrderData();
  731. delOrderData.model = "order";
  732. delOrderData.domain = new List<domainItem>();
  733. domainItem doitem = new domainItem();
  734. doitem.FieldName = "Id";
  735. doitem.FieldValue = QueryOrders[i].Id.ToString();
  736. doitem.ConditionalType = 6;
  737. delOrderData.domain.Add(doitem);
  738. JObject str = JObject.Parse(JsonConvert.SerializeObject(delOrderData));
  739. int ret = delTableList(str);
  740. if (ret == 1)
  741. {
  742. //删除历史
  743. QueryOrderData HistoryOrderData = new QueryOrderData();
  744. HistoryOrderData.model = "OrderHistory";
  745. HistoryOrderData.domain = new List<domainItem>();
  746. domainItem doitem2 = new domainItem();
  747. doitem2.FieldName = "Pid";
  748. doitem2.FieldValue = QueryOrders[i].Id.ToString();
  749. doitem2.ConditionalType = 6;
  750. HistoryOrderData.domain.Add(doitem2);
  751. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(HistoryOrderData));
  752. delTableList(str2);
  753. }
  754. }
  755. }
  756. //重新显示
  757. QueryData();
  758. }
  759. #endregion
  760. #region Excel 文本导出
  761. private DataTable GetExcelTabel(out List<Point> points)
  762. {
  763. points = new List<Point>();
  764. //记录数据类型列数
  765. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  766. DataTable dt = new DataTable(); //建立个数据表
  767. //通用列
  768. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  769. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  770. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  771. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  772. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  773. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  774. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  775. dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  776. dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  777. dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  778. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  779. foreach (var item in QueryAllOrders)
  780. {
  781. //老流程
  782. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  783. {
  784. //加入数据表
  785. if (item.SizeDefectInfoList == null)
  786. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  787. #region 张力
  788. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  789. {
  790. PointCode = "Tension",
  791. StepName = "张力",
  792. Data = item.Tension1,
  793. });
  794. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  795. {
  796. PointCode = "Tension",
  797. StepName = "张力",
  798. Data = item.Tension2,
  799. });
  800. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  801. {
  802. PointCode = "Tension",
  803. StepName = "张力",
  804. Data = item.Tension3,
  805. });
  806. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  807. {
  808. PointCode = "Tension",
  809. StepName = "张力",
  810. Data = item.Tension4,
  811. });
  812. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  813. {
  814. PointCode = "Tension",
  815. StepName = "张力",
  816. Data = item.Tension5,
  817. });
  818. #endregion
  819. #region 厚度
  820. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  821. {
  822. PointCode = "Height",
  823. StepName = "厚度",
  824. Data = item.Height1,
  825. });
  826. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  827. {
  828. PointCode = "Height",
  829. StepName = "厚度",
  830. Data = item.Height2,
  831. });
  832. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  833. {
  834. PointCode = "Height",
  835. StepName = "厚度",
  836. Data = item.Height3,
  837. });
  838. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  839. {
  840. PointCode = "Height",
  841. StepName = "厚度",
  842. Data = item.Height4,
  843. });
  844. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  845. {
  846. PointCode = "Height",
  847. StepName = "厚度",
  848. Data = item.Height5,
  849. });
  850. #endregion
  851. #region YPT
  852. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  853. {
  854. PointCode = "Y轴方向PT值检测",
  855. StepName = "Y轴方向PT值检测",
  856. Data = item.PT1,
  857. });
  858. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  859. {
  860. PointCode = "Y轴方向PT值检测",
  861. StepName = "Y轴方向PT值检测",
  862. Data = item.PT2,
  863. });
  864. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  865. {
  866. PointCode = "Y轴方向PT值检测",
  867. StepName = "Y轴方向PT值检测",
  868. Data = item.PT3,
  869. });
  870. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  871. {
  872. PointCode = "Y轴方向PT值检测",
  873. StepName = "Y轴方向PT值检测",
  874. Data = item.PT5,
  875. });
  876. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  877. {
  878. PointCode = "Y轴方向PT值检测",
  879. StepName = "Y轴方向PT值检测",
  880. Data = item.PT6,
  881. });
  882. #endregion
  883. #region 线宽
  884. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  885. {
  886. PointCode = "线宽正面",
  887. StepName = "线宽正面",
  888. Data = item.LineWidth1,
  889. });
  890. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  891. {
  892. PointCode = "线宽正面",
  893. StepName = "线宽正面",
  894. Data = item.LineWidth2,
  895. });
  896. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  897. {
  898. PointCode = "线宽正面",
  899. StepName = "线宽正面",
  900. Data = item.LineWidth3,
  901. });
  902. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  903. {
  904. PointCode = "线宽正面",
  905. StepName = "线宽正面",
  906. Data = item.LineWidth4,
  907. });
  908. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  909. {
  910. PointCode = "线宽正面",
  911. StepName = "线宽正面",
  912. Data = item.LineWidth5,
  913. });
  914. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  915. {
  916. PointCode = "线宽正面",
  917. StepName = "线宽正面",
  918. Data = item.LineWidth6,
  919. });
  920. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  921. {
  922. PointCode = "线宽正面",
  923. StepName = "线宽正面",
  924. Data = item.LineWidth7,
  925. });
  926. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  927. {
  928. PointCode = "线宽正面",
  929. StepName = "线宽正面",
  930. Data = item.LineWidth8,
  931. });
  932. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  933. {
  934. PointCode = "线宽正面",
  935. StepName = "线宽正面",
  936. Data = item.LineWidth9,
  937. });
  938. #endregion
  939. #region 缺陷
  940. if (item.DefectCntInfoList == null)
  941. item.DefectCntInfoList = new List<DefectCntInfo>();
  942. item.DefectCntInfoList.Add(new DefectCntInfo()
  943. {
  944. Name = "堵孔",
  945. Code = "dk",
  946. DefectCnt = item.DKCount,
  947. });
  948. item.DefectCntInfoList.Add(new DefectCntInfo()
  949. {
  950. Name = "脏污",
  951. Code = "zw",
  952. DefectCnt = item.ZWCount,
  953. });
  954. item.DefectCntInfoList.Add(new DefectCntInfo()
  955. {
  956. Name = "钢丝异常",
  957. Code = "gsyc",
  958. DefectCnt = item.GSYCCount,
  959. });
  960. item.DefectCntInfoList.Add(new DefectCntInfo()
  961. {
  962. Name = "缺口",
  963. Code = "qk",
  964. DefectCnt = item.QKCount,
  965. });
  966. item.DefectCntInfoList.Add(new DefectCntInfo()
  967. {
  968. Name = "纤维丝",
  969. Code = "xws",
  970. DefectCnt = item.XWSCount,
  971. });
  972. item.DefectCntInfoList.Add(new DefectCntInfo()
  973. {
  974. Name = "针孔",
  975. Code = "zk",
  976. DefectCnt = item.ZKCount,
  977. });
  978. item.DefectCntInfoList.Add(new DefectCntInfo()
  979. {
  980. Name = "泡泡",
  981. Code = "pp",
  982. DefectCnt = item.PPCount,
  983. });
  984. item.DefectCntInfoList.Add(new DefectCntInfo()
  985. {
  986. Name = "压线",
  987. Code = "yx",
  988. DefectCnt = item.YXCount,
  989. });
  990. item.DefectCntInfoList.Add(new DefectCntInfo()
  991. {
  992. Name = "划伤",
  993. Code = "hs",
  994. DefectCnt = item.HSCount,
  995. });
  996. item.DefectCntInfoList.Add(new DefectCntInfo()
  997. {
  998. Name = "斜边",
  999. Code = "xb",
  1000. DefectCnt = item.XBCount,
  1001. });
  1002. item.DefectCntInfoList.Add(new DefectCntInfo()
  1003. {
  1004. Name = "栅线",
  1005. Code = "sx",
  1006. DefectCnt = item.SXCount,
  1007. });
  1008. #endregion
  1009. if (!dataCnt.ContainsKey("张力"))
  1010. dataCnt.Add("张力", 5);
  1011. else
  1012. if (dataCnt["张力"] < 5)
  1013. dataCnt["张力"] = 5;
  1014. if (!dataCnt.ContainsKey("厚度"))
  1015. dataCnt.Add("厚度", 5);
  1016. else
  1017. if (dataCnt["厚度"] < 5)
  1018. dataCnt["厚度"] = 5;
  1019. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  1020. dataCnt.Add("Y轴方向PT值检测", 5);
  1021. else
  1022. if (dataCnt["Y轴方向PT值检测"] < 5)
  1023. dataCnt["Y轴方向PT值检测"] = 5;
  1024. if (!dataCnt.ContainsKey("线宽正面"))
  1025. dataCnt.Add("线宽正面", 9);
  1026. else
  1027. if (dataCnt["线宽正面"] < 9)
  1028. dataCnt["线宽正面"] = 9;
  1029. }
  1030. else
  1031. {
  1032. //按照步骤流程分类
  1033. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  1034. for (int i = 0; i < pointType.Length; i++)
  1035. {
  1036. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i] && !q.isAverage).ToList();
  1037. if (t.Count > 0)
  1038. {
  1039. //当前测试项数据个数
  1040. if (!dataCnt.ContainsKey(pointType[i]))
  1041. dataCnt.Add(pointType[i], t.Count);
  1042. else
  1043. if (dataCnt[pointType[i]] < t.Count)
  1044. dataCnt[pointType[i]] = t.Count;
  1045. }
  1046. }
  1047. }
  1048. }
  1049. //插入列
  1050. foreach (var item in dataCnt)
  1051. {
  1052. //按步骤名称插入列
  1053. for (int i = 0; i < item.Value; i++)
  1054. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  1055. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  1056. }
  1057. foreach (var item in ConfMgr.Instance.DefectItemParamsList)
  1058. if(item.Show == 1)
  1059. dt.Columns.Add(new DataColumn(item.Name + "数量", typeof(int)));//在表中添加int类型的列
  1060. int row_index = 0;
  1061. foreach (var item in QueryAllOrders)
  1062. {
  1063. //新增
  1064. DataRow dr;//行
  1065. dr = dt.NewRow();
  1066. //dr["选择"] = false;
  1067. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1068. dr["检测单号"] = item.DetectOrder;
  1069. dr["产品名称"] = item.ProductInfo.Name;
  1070. dr["料号"] = item.ProductInfo.Code;
  1071. dr["网版编码"] = item.SN;
  1072. dr["批次"] = item.BatchId;
  1073. dr["合格"] = item.Qualified ? "合格" : "不合格";
  1074. dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1075. dr["异常情况"] = item.Abnormalities;
  1076. dr["修复人员"] = item.RepairCode;
  1077. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1078. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1079. foreach (var tdata in dataCnt)
  1080. {
  1081. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key ).ToList();
  1082. List<double> dataList = new List<double>();
  1083. //for (int i = 0; i < tempd.Count; i++)
  1084. // dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1085. //dr[$"{tdata.Key}均值"] = item.TensionValue.ToString("0.0000");
  1086. int data_index = 0;
  1087. for (int i = 0; i < tempd.Count; i++)
  1088. {
  1089. int col_index = 0;
  1090. if (!tempd[i].isAverage)
  1091. {
  1092. dataList.Add(tempd[i].Data);
  1093. dr[$"{tdata.Key}-{data_index + 1}"] = tempd[i].Data.ToString("0.0000");
  1094. col_index = dr.Table.Columns.IndexOf($"{tdata.Key}-{data_index + 1}");
  1095. data_index++;
  1096. }
  1097. else
  1098. col_index = dr.Table.Columns.IndexOf($"{tdata.Key}均值");
  1099. if (tempd[i].result == 2)
  1100. points.Add(new Point(row_index, col_index));
  1101. }
  1102. if (dataList.Count > 0)
  1103. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  1104. else
  1105. dr[$"{tdata.Key}均值"] = "0";
  1106. }
  1107. foreach (var defItem in ConfMgr.Instance.DefectItemParamsList)
  1108. {
  1109. if (defItem.Show == 1)
  1110. {
  1111. if (item.DefectCntInfoList != null)
  1112. {
  1113. var fd = item.DefectCntInfoList.Find(x => x.Name == defItem.Name);
  1114. if (fd != null)
  1115. dr[defItem.Name + "数量"] = fd.DefectCnt;
  1116. else
  1117. dr[defItem.Name + "数量"] = 0;
  1118. }
  1119. else
  1120. dr[defItem.Name + "数量"] = 0;
  1121. }
  1122. }
  1123. dt.Rows.Add(dr);//在表的对象的行里添加此行
  1124. row_index++;
  1125. }
  1126. return dt;
  1127. }
  1128. private void ShowAllDataTableEx(string filePath, DataTable dt)
  1129. {
  1130. try
  1131. {
  1132. // 创建一个新的CSV文件并写入数据
  1133. using (StreamWriter writer = new StreamWriter(filePath, false, UnicodeEncoding.GetEncoding("GB2312")))
  1134. {
  1135. // 写入CSV文件的标题行
  1136. for (int i = 0; i < dt.Columns.Count; i++)
  1137. {
  1138. writer.Write(dt.Columns[i].ColumnName + ",");
  1139. }
  1140. writer.Write("\r\n");
  1141. for (int i = 0; i < dt.Rows.Count; i++)
  1142. {
  1143. // 写入数据行
  1144. for (int j = 0; j < dt.Columns.Count; j++)
  1145. {
  1146. writer.Write(dt.Rows[i][j] + ",");
  1147. }
  1148. writer.Write("\r\n");
  1149. //Console.WriteLine("CSV文件写入成功!");
  1150. }
  1151. }
  1152. }
  1153. catch (Exception ex)
  1154. {
  1155. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1156. }
  1157. return;
  1158. }
  1159. private void skinButton1_Click(object sender, EventArgs e)
  1160. {
  1161. DataTable dt = (DataTable)dataGridView1.DataSource;
  1162. if (dt.Rows.Count > 0)
  1163. {
  1164. SaveFileDialog fileDialog = new SaveFileDialog();
  1165. fileDialog.Filter = "数据文件(*.csv)|*.csv";
  1166. //fileDialog.Filter = "数据文件(*.xlsx)|*.xlsx";
  1167. fileDialog.Title = "保存数据";
  1168. //保存对话框是否记忆上次打开的目录
  1169. fileDialog.RestoreDirectory = true;
  1170. if (fileDialog.ShowDialog() == DialogResult.OK)
  1171. {
  1172. try
  1173. {
  1174. string filePath = fileDialog.FileName; // CSV文件路径
  1175. List<Point> pt;
  1176. DataTable tdt = GetExcelTabel(out pt);
  1177. //tdt.Columns.RemoveAt(0);
  1178. //tdt.Columns.RemoveAt(tdt.Columns.Count -1);
  1179. //OutputAsExcelFile(tdt, filePath, pt);
  1180. ShowAllDataTableEx(filePath, tdt);
  1181. MessageBox.Show("数据导出成功!" , "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1182. }
  1183. catch (Exception ex)
  1184. {
  1185. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1186. }
  1187. }
  1188. }
  1189. }
  1190. #endregion
  1191. private void btnClear_Click(object sender, EventArgs e)
  1192. {
  1193. cbProductCode.Text = "";
  1194. }
  1195. #region excel导出
  1196. public Excel.Application m_xlApp = null;
  1197. public void OutputAsExcelFile(DataTable dtTable, String filePath, List<Point> points)
  1198. {
  1199. //string filePath = "";
  1200. //SaveFileDialog s = new SaveFileDialog();
  1201. //s.Title = "保存Excel文件";
  1202. //s.Filter = "Excel文件(*.xls)|*.xls";
  1203. //s.FilterIndex = 1;
  1204. //if (s.ShowDialog() == DialogResult.OK)
  1205. // filePath = s.FileName;
  1206. //else
  1207. // return;
  1208. //导出dataTable到Excel
  1209. long rowNum = dtTable.Rows.Count;//行数
  1210. int columnNum = dtTable.Columns.Count;//列数
  1211. Excel.Application m_xlApp = new Excel.Application();
  1212. m_xlApp.DisplayAlerts = false;//不显示更改提示
  1213. m_xlApp.Visible = false;
  1214. Excel.Workbooks workbooks = m_xlApp.Workbooks;
  1215. Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
  1216. Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
  1217. try
  1218. {
  1219. string[,] datas = new string[rowNum + 1, columnNum];
  1220. for (int i = 0; i < columnNum; i++) //写入字段
  1221. datas[0, i] = dtTable.Columns[i].Caption; //写入列标
  1222. //Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]);
  1223. Excel.Range range = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]];
  1224. range.Interior.ColorIndex = 15;//15代表灰色
  1225. range.Font.Bold = true;
  1226. range.Font.Size = 10;
  1227. int r = 0;
  1228. for (r = 0; r < rowNum; r++)
  1229. {
  1230. for (int i = 0; i < columnNum; i++)
  1231. {
  1232. object obj;
  1233. obj = dtTable.Rows[r][dtTable.Columns[i].ToString()];
  1234. datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式
  1235. //Console.WriteLine(datas[r + 1, i]);
  1236. }
  1237. System.Windows.Forms.Application.DoEvents();
  1238. //添加进度条
  1239. }
  1240. //Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);
  1241. Excel.Range fchR = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]];
  1242. fchR.Value2 = datas;
  1243. worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
  1244. //worksheet.Name = "dd";
  1245. //m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;
  1246. m_xlApp.Visible = false;
  1247. // = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);
  1248. range = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]];
  1249. for (int i = 0; i < points.Count; i++)
  1250. {
  1251. Excel.Range Errrange = m_xlApp.Range[worksheet.Cells[points[i].X + 2, points[i].Y + 1], worksheet.Cells[points[i].X + 2, points[i].Y + 1]];
  1252. Errrange.Font.ColorIndex = 3;//3红色
  1253. }
  1254. //range.Interior.ColorIndex = 15;//15代表灰色
  1255. range.Font.Size = 9;
  1256. range.RowHeight = 14.25;
  1257. range.Borders.LineStyle = 1;
  1258. range.HorizontalAlignment = 1;
  1259. workbook.Saved = true;
  1260. workbook.SaveCopyAs(filePath);
  1261. }
  1262. catch (Exception ex)
  1263. {
  1264. MessageBox.Show("导出异常:" + ex.Message, "导出异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  1265. }
  1266. finally
  1267. {
  1268. EndReport();
  1269. }
  1270. m_xlApp.Workbooks.Close();
  1271. m_xlApp.Workbooks.Application.Quit();
  1272. m_xlApp.Application.Quit();
  1273. m_xlApp.Quit();
  1274. //MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1275. }
  1276. private void EndReport()
  1277. {
  1278. object missing = System.Reflection.Missing.Value;
  1279. try
  1280. { }
  1281. catch { }
  1282. finally
  1283. {
  1284. try
  1285. {
  1286. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Workbooks);
  1287. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Application);
  1288. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp);
  1289. //m_xlApp = null;
  1290. }
  1291. catch { }
  1292. try
  1293. {
  1294. //清理垃圾进程
  1295. this.killProcessThread();
  1296. }
  1297. catch { }
  1298. GC.Collect();
  1299. }
  1300. }
  1301. private void killProcessThread()
  1302. {
  1303. ArrayList myProcess = new ArrayList();
  1304. for (int i = 0; i < myProcess.Count; i++)
  1305. {
  1306. try
  1307. {
  1308. System.Diagnostics.Process.GetProcessById(int.Parse((string)myProcess[i])).Kill();
  1309. }
  1310. catch { }
  1311. }
  1312. }
  1313. #endregion
  1314. }
  1315. }