版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

1168 строки
56 KiB

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