FormRecordsManager.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using DevComponents.DotNetBar.Controls;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Runtime.InteropServices;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using Excel = Microsoft.Office.Interop.Excel;
  14. namespace centralController
  15. {
  16. public partial class FormRecordsManager : Form
  17. {
  18. public FormRecordsManager()
  19. {
  20. InitializeComponent();
  21. }
  22. private void btnx_parkingRecordSearch_Click(object sender, EventArgs e)
  23. {
  24. DateTime start, end;
  25. string license="";
  26. try
  27. {
  28. start = DateTime.Parse(dtp_parkStartDate.Text);
  29. end = DateTime.Parse(dtp_parkEndDate.Text);
  30. license = tb_parkLicense.Text;
  31. }
  32. catch { MessageBox.Show("日期输入异常,请重新输入");return; }
  33. dgvx_parkingRecords.Rows.Clear();
  34. List<object[]> list = Monitor.Monitor.GetParkingRecords(license,start.ToString("yyyy-MM-dd"), end.AddDays(1).ToString("yyyy-MM-dd"));
  35. List<object[]>.Enumerator listEnumer = list.GetEnumerator();
  36. while (listEnumer.MoveNext())
  37. {
  38. dgvx_parkingRecords.Rows.Add(listEnumer.Current);
  39. }
  40. //Console.WriteLine(mtb_startDate.Text+","+mtb_endDate.Text);
  41. //Console.WriteLine(start.ToString("yyyy-MM-dd") + "," + end.ToString("yyyy-MM-dd"));
  42. }
  43. private void btnx_parkingRecrodExport_Click(object sender, EventArgs e)
  44. {
  45. SaveRecord(dgvx_parkingRecords);
  46. }
  47. private void btnx_orderRecordSearch_Click(object sender, EventArgs e)
  48. {
  49. DateTime start, end;
  50. string license = "";
  51. try
  52. {
  53. start = DateTime.Parse(dtp_orderStartDate.Text);
  54. end = DateTime.Parse(dtp_orderEndDate.Text);
  55. license = tb_orderLicense.Text;
  56. }
  57. catch { MessageBox.Show("日期输入异常,请重新输入"); return; }
  58. dgvx_orderRecords.Rows.Clear();
  59. List<object[]> list = Monitor.Monitor.GetOrderRecords(true, license, start.ToString("yyyy-MM-dd"), end.AddDays(1).ToString("yyyy-MM-dd"));
  60. //if (list.Count != 0) { Console.WriteLine("id:"+(int)(UInt32)list[0][0]); }
  61. List<object[]>.Enumerator listEnumer = list.GetEnumerator();
  62. while (listEnumer.MoveNext())
  63. {
  64. dgvx_orderRecords.Rows.Add(listEnumer.Current);
  65. }
  66. }
  67. private void btn_orderRecordExport_Click(object sender, EventArgs e)
  68. {
  69. SaveRecord(dgvx_orderRecords);
  70. }
  71. /// <summary>
  72. /// 保存记录为xls
  73. /// </summary>
  74. private void SaveRecord(DataGridViewX dataGridView1)
  75. {
  76. FolderBrowserDialog dialog = new FolderBrowserDialog();
  77. dialog.Description = "请选择日志将要导出的目标文件夹";
  78. if (dialog.ShowDialog() == DialogResult.OK)
  79. {
  80. if (string.IsNullOrEmpty(dialog.SelectedPath))
  81. {
  82. DialogResult answer = MessageBox.Show("文件夹路径为空\n使用默认位置" + Directory.GetCurrentDirectory() + "?", "提示", MessageBoxButtons.OKCancel);
  83. if (answer.Equals(DialogResult.OK))
  84. {
  85. Export(dataGridView1, Directory.GetCurrentDirectory() + "\\", stc_recordManager.SelectedTab.Text);
  86. }
  87. else
  88. {
  89. return;
  90. }
  91. }
  92. else
  93. {
  94. DialogResult answer = MessageBox.Show("将日志保存到" + dialog.SelectedPath + "?", "提示", MessageBoxButtons.OKCancel);
  95. if (answer.Equals(DialogResult.OK))
  96. {
  97. Export(dataGridView1, dialog.SelectedPath + "\\", stc_recordManager.SelectedTab.Text);
  98. }
  99. else
  100. {
  101. return;
  102. }
  103. }
  104. }
  105. }
  106. /// <summary>
  107. /// 导出excel文件
  108. /// </summary>
  109. /// <param name="dataGridView1"></param>
  110. /// <param name="path">绝对路径,"D:\\abc\\xxx.xls"</param>
  111. private void Export(DataGridViewX dataGridView1, string path,string name)
  112. {
  113. try
  114. {
  115. if (dataGridView1.Rows.Count == 0)
  116. {
  117. return;
  118. }
  119. Excel.Application excel = new Excel.Application();
  120. excel.Visible = false;
  121. Excel.Workbook workbook = excel.Workbooks.Add(true);
  122. Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
  123. for (int i = 0; i < dataGridView1.Columns.Count; i++)
  124. {
  125. if (dataGridView1.Columns[i].Visible == true)
  126. {
  127. worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
  128. }
  129. }
  130. for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
  131. {
  132. System.Windows.Forms.Application.DoEvents();
  133. for (int j = 0; j < dataGridView1.Columns.Count; j++)
  134. {
  135. if (dataGridView1.Columns[j].Visible == true)
  136. {
  137. if (dataGridView1[j, i].ValueType == typeof(string))
  138. {
  139. worksheet.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
  140. }
  141. else
  142. {
  143. worksheet.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
  144. }
  145. }
  146. }
  147. }
  148. //设置禁止弹出保存和覆盖的询问提示框
  149. excel.DisplayAlerts = false;
  150. excel.AlertBeforeOverwriting = false;
  151. worksheet.Cells.Columns.AutoFit();
  152. //保存写入的数据,这里还没有保存到磁盘
  153. workbook.Saved = true;
  154. if (Directory.Exists(path))
  155. {
  156. //设置新建文件路径及名称
  157. string savePath = path + DateTime.Now.ToString("yyyy-MM-dd") + name +".xls";
  158. //创建文件
  159. FileStream file = new FileStream(savePath, FileMode.CreateNew);
  160. //关闭释放流,不然没办法写入数据
  161. file.Close();
  162. file.Dispose();
  163. //保存到指定的路径
  164. workbook.SaveCopyAs(savePath);
  165. }
  166. workbook.Close(false, Type.Missing, Type.Missing);
  167. //确保Excel进程关闭
  168. excel.Quit();
  169. //释放 COM 对象
  170. Marshal.ReleaseComObject(worksheet);
  171. Marshal.ReleaseComObject(workbook);
  172. Marshal.ReleaseComObject(excel);
  173. excel = null;
  174. worksheet = null;
  175. workbook = null;
  176. GC.Collect();//如果不使用这条语,excel会无法正常退出
  177. }
  178. catch (Exception e) { Console.WriteLine("导出excel文件异常," + e.Message); }
  179. }
  180. }
  181. }