ReportForm.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraPrinting;
  3. using GCAS.Code;
  4. using GCAS.Dto;
  5. using GCAS.Localization;
  6. using GCAS.Model;
  7. using System;
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.Drawing;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Threading;
  15. using System.Threading.Tasks;
  16. using System.Windows.Forms;
  17. namespace GCAS
  18. {
  19. public partial class ReportForm : XtraForm
  20. {
  21. private List<NameValue> L;
  22. private RecordRepository recordRepository;
  23. private DeviceRepository deviceRepository;
  24. public OperatorModel currentUser;
  25. private EntranceRepository entranceRepository;
  26. private TeamRepository teamRepository;
  27. private ActionsRepository actionsRepository;
  28. private DateTime startTime;
  29. private DateTime endTime;
  30. private List<DeviceModel> devices;
  31. private List<TeamModel> teams;
  32. private TeamModel teamNext;
  33. private List<EntranceModel> entrances;
  34. private string range;
  35. private string type;
  36. public ReportForm()
  37. {
  38. InitializeComponent();
  39. L = LocalizationHelper.GetSource(Thread.CurrentThread.CurrentUICulture);
  40. range = "day";
  41. type = L.GetString("team");
  42. }
  43. private async void ReportForm_LoadAsync(object sender, EventArgs e)
  44. {
  45. recordRepository = new RecordRepository();
  46. deviceRepository = new DeviceRepository();
  47. devices = deviceRepository.GetList();
  48. actionsRepository = new ActionsRepository();
  49. entranceRepository = new EntranceRepository();
  50. entrances = entranceRepository.GetList();
  51. teamRepository = new TeamRepository();
  52. teams = teamRepository.GetList();
  53. teamNext = teams.Where(c => c.NextDay == 1).FirstOrDefault();
  54. cb_range.SelectedIndex = 0;
  55. cb_types.SelectedIndex = 0;
  56. await BindGridAsync();
  57. }
  58. private async Task BindGridAsync()
  59. {
  60. DataTable dt = new DataTable();
  61. dt.Columns.Add(new DataColumn("Time", typeof(string)));
  62. dt.Columns.Add(new DataColumn("TotalCount", typeof(int)));
  63. dt.Columns.Add(new DataColumn("TotalWeight", typeof(double)));
  64. gridView1.LoadingPanelVisible = true;
  65. if (teamNext != null && cb_range.SelectedIndex >= 1)
  66. {
  67. endTime = Convert.ToDateTime(endTime.AddDays(1).ToShortDateString() + " " + teamNext.EndTime);
  68. }
  69. var query = await recordRepository.GetList(null, 0, 0, 0, startTime, endTime);
  70. if (teamNext != null && cb_range.SelectedIndex >= 1)
  71. {
  72. foreach (var item in query)
  73. {
  74. if (item.Team == teamNext.Id)
  75. {
  76. var tempTime = Convert.ToDateTime(item.Time.ToShortDateString() + " " + teamNext.EndTime);
  77. if (item.Time < tempTime)
  78. {
  79. item.Time = item.Time.AddDays(-1);
  80. }
  81. }
  82. }
  83. }
  84. ArrayList tempList = new ArrayList();
  85. switch (cb_range.SelectedIndex)
  86. {
  87. case 0:
  88. switch (cb_types.SelectedIndex)
  89. {
  90. case 0:
  91. var tGroup = query.GroupBy(c => c.Time.Hour);
  92. dt.Columns.AddRange(teams.Select(c => new DataColumn("team" + c.Id, typeof(double))).ToArray());
  93. foreach (var g in tGroup)
  94. {
  95. tempList.Clear();
  96. tempList.Add(g.Key.ToString().PadLeft(2, '0') + ":00:00-" + g.Key.ToString().PadLeft(2, '0') + ":59:59");
  97. tempList.Add(g.Count());
  98. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  99. foreach (var item in teams)
  100. {
  101. tempList.Add(Math.Round(g.Where(c => c.Team == item.Id).Sum(c => c.NetWeight), 2));
  102. }
  103. dt.LoadDataRow(tempList.ToArray(), true);
  104. }
  105. break;
  106. case 1:
  107. tGroup = query.GroupBy(c => c.Time.Hour);
  108. dt.Columns.AddRange(devices.Select(c => new DataColumn("device" + c.Id, typeof(double))).ToArray());
  109. foreach (var g in tGroup)
  110. {
  111. tempList.Clear();
  112. tempList.Add(g.Key.ToString().PadLeft(2, '0') + ":00:00-" + g.Key.ToString().PadLeft(2, '0') + ":59:59");
  113. tempList.Add(g.Count());
  114. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  115. foreach (var item in devices)
  116. {
  117. tempList.Add(Math.Round(g.Where(c => c.Device == item.Id).Sum(c => c.NetWeight), 2));
  118. }
  119. dt.LoadDataRow(tempList.ToArray(), true);
  120. }
  121. break;
  122. case 2:
  123. tGroup = query.GroupBy(c => c.Time.Hour);
  124. dt.Columns.AddRange(entrances.Select(c => new DataColumn("entrance" + c.Id, typeof(double))).ToArray());
  125. foreach (var g in tGroup)
  126. {
  127. tempList.Clear();
  128. tempList.Add(g.Key.ToString().PadLeft(2, '0') + ":00:00-" + g.Key.ToString().PadLeft(2, '0') + ":59:59");
  129. tempList.Add(g.Count());
  130. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  131. foreach (var item in entrances)
  132. {
  133. tempList.Add(Math.Round(g.Where(c => c.Entrance == item.Id).Sum(c => c.NetWeight), 2));
  134. }
  135. dt.LoadDataRow(tempList.ToArray(), true);
  136. }
  137. break;
  138. }
  139. break;
  140. case 1:
  141. switch (cb_types.SelectedIndex)
  142. {
  143. case 0:
  144. var tGroup = query.GroupBy(c => c.Time.DayOfWeek);
  145. dt.Columns.AddRange(teams.Select(c => new DataColumn("team" + c.Id, typeof(double))).ToArray());
  146. foreach (var g in tGroup)
  147. {
  148. tempList.Clear();
  149. tempList.Add(Tools.GetWeek(g.Key));
  150. tempList.Add(g.Count());
  151. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  152. foreach (var item in teams)
  153. {
  154. tempList.Add(Math.Round(g.Where(c => c.Team == item.Id).Sum(c => c.NetWeight), 2));
  155. }
  156. dt.LoadDataRow(tempList.ToArray(), true);
  157. }
  158. break;
  159. case 1:
  160. tGroup = query.GroupBy(c => c.Time.DayOfWeek);
  161. dt.Columns.AddRange(devices.Select(c => new DataColumn("device" + c.Id, typeof(double))).ToArray());
  162. foreach (var g in tGroup)
  163. {
  164. tempList.Clear();
  165. tempList.Add(Tools.GetWeek(g.Key));
  166. tempList.Add(g.Count());
  167. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  168. foreach (var item in devices)
  169. {
  170. tempList.Add(Math.Round(g.Where(c => c.Device == item.Id).Sum(c => c.NetWeight), 2));
  171. }
  172. dt.LoadDataRow(tempList.ToArray(), true);
  173. }
  174. break;
  175. case 2:
  176. tGroup = query.GroupBy(c => c.Time.DayOfWeek);
  177. dt.Columns.AddRange(entrances.Select(c => new DataColumn("entrance" + c.Id, typeof(double))).ToArray());
  178. foreach (var g in tGroup)
  179. {
  180. tempList.Clear();
  181. tempList.Add(Tools.GetWeek(g.Key));
  182. tempList.Add(g.Count());
  183. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  184. foreach (var item in entrances)
  185. {
  186. tempList.Add(Math.Round(g.Where(c => c.Entrance == item.Id).Sum(c => c.NetWeight), 2));
  187. }
  188. dt.LoadDataRow(tempList.ToArray(), true);
  189. }
  190. break;
  191. }
  192. break;
  193. case 2:
  194. switch (cb_types.SelectedIndex)
  195. {
  196. case 0:
  197. var tGroup = query.GroupBy(c => c.Time.Month + "-" + c.Time.Day);
  198. dt.Columns.AddRange(teams.Select(c => new DataColumn("team" + c.Id, typeof(double))).ToArray());
  199. foreach (var g in tGroup)
  200. {
  201. tempList.Clear();
  202. tempList.Add(Tools.GetDay(g.Key));
  203. tempList.Add(g.Count());
  204. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  205. foreach (var item in teams)
  206. {
  207. tempList.Add(Math.Round(g.Where(c => c.Team == item.Id).Sum(c => c.NetWeight), 2));
  208. }
  209. dt.LoadDataRow(tempList.ToArray(), true);
  210. }
  211. break;
  212. case 1:
  213. tGroup = query.GroupBy(c => c.Time.Month + "-" + c.Time.Day);
  214. dt.Columns.AddRange(devices.Select(c => new DataColumn("device" + c.Id, typeof(double))).ToArray());
  215. foreach (var g in tGroup)
  216. {
  217. tempList.Clear();
  218. tempList.Add(Tools.GetDay(g.Key));
  219. tempList.Add(g.Count());
  220. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  221. foreach (var item in devices)
  222. {
  223. tempList.Add(Math.Round(g.Where(c => c.Device == item.Id).Sum(c => c.NetWeight), 2));
  224. }
  225. dt.LoadDataRow(tempList.ToArray(), true);
  226. }
  227. break;
  228. case 2:
  229. tGroup = query.GroupBy(c => c.Time.Month + "-" + c.Time.Day);
  230. dt.Columns.AddRange(entrances.Select(c => new DataColumn("entrance" + c.Id, typeof(double))).ToArray());
  231. foreach (var g in tGroup)
  232. {
  233. tempList.Clear();
  234. tempList.Add(Tools.GetDay(g.Key));
  235. tempList.Add(g.Count());
  236. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  237. foreach (var item in entrances)
  238. {
  239. tempList.Add(Math.Round(g.Where(c => c.Entrance == item.Id).Sum(c => c.NetWeight), 2));
  240. }
  241. dt.LoadDataRow(tempList.ToArray(), true);
  242. }
  243. break;
  244. }
  245. break;
  246. case 3:
  247. switch (cb_types.SelectedIndex)
  248. {
  249. case 0:
  250. var tGroup = query.GroupBy(c => c.Time.Month);
  251. dt.Columns.AddRange(teams.Select(c => new DataColumn("team" + c.Id, typeof(double))).ToArray());
  252. foreach (var g in tGroup)
  253. {
  254. tempList.Clear();
  255. tempList.Add(Tools.GetMonth(g.Key));
  256. tempList.Add(g.Count());
  257. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  258. foreach (var item in teams)
  259. {
  260. tempList.Add(Math.Round(g.Where(c => c.Team == item.Id).Sum(c => c.NetWeight), 2));
  261. }
  262. dt.LoadDataRow(tempList.ToArray(), true);
  263. }
  264. break;
  265. case 1:
  266. tGroup = query.GroupBy(c => c.Time.Month);
  267. dt.Columns.AddRange(devices.Select(c => new DataColumn("device" + c.Id, typeof(double))).ToArray());
  268. foreach (var g in tGroup)
  269. {
  270. tempList.Clear();
  271. tempList.Add(Tools.GetMonth(g.Key));
  272. tempList.Add(g.Count());
  273. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  274. foreach (var item in devices)
  275. {
  276. tempList.Add(Math.Round(g.Where(c => c.Device == item.Id).Sum(c => c.NetWeight), 2));
  277. }
  278. dt.LoadDataRow(tempList.ToArray(), true);
  279. }
  280. break;
  281. case 2:
  282. tGroup = query.GroupBy(c => c.Time.Month);
  283. dt.Columns.AddRange(entrances.Select(c => new DataColumn("entrance" + c.Id, typeof(double))).ToArray());
  284. foreach (var g in tGroup)
  285. {
  286. tempList.Clear();
  287. tempList.Add(Tools.GetMonth(g.Key));
  288. tempList.Add(g.Count());
  289. tempList.Add(Math.Round(g.Sum(e => e.NetWeight), 2));
  290. foreach (var item in entrances)
  291. {
  292. tempList.Add(Math.Round(g.Where(c => c.Entrance == item.Id).Sum(c => c.NetWeight), 2));
  293. }
  294. dt.LoadDataRow(tempList.ToArray(), true);
  295. }
  296. break;
  297. }
  298. break;
  299. }
  300. gridControl1.DataSource = dt;
  301. gridView1.FocusedRowHandle = -1;
  302. gridView1.LoadingPanelVisible = false;
  303. }
  304. private void gridControl1_Load(object sender, EventArgs e)
  305. {
  306. if (File.Exists(Application.StartupPath + @"\" + Text + ".xml"))
  307. {
  308. gridView1.RestoreLayoutFromXml(Application.StartupPath + @"\" + Text + ".xml"); //加载布局
  309. }
  310. }
  311. private void gridView1_Layout(object sender, EventArgs e)
  312. {
  313. gridView1.SaveLayoutToXml(Application.StartupPath + @"\" + Text + ".xml");//保存布局
  314. }
  315. private void rg_type_SelectedIndexChanged(object sender, EventArgs e)
  316. {
  317. switch ((sender as ComboBoxEdit).SelectedIndex)
  318. {
  319. case 0:
  320. range = "day";
  321. btn_pre.Text = L.GetString("prevDay");
  322. btn_next.Text = L.GetString("nextDay");
  323. btn_cur.Text = L.GetString("today");
  324. startTime = DateTime.Today;
  325. endTime = startTime.AddDays(1).AddSeconds(-1);
  326. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " 24:00";
  327. break;
  328. case 1:
  329. range = "week";
  330. btn_pre.Text = L.GetString("prevWeek");
  331. btn_next.Text = L.GetString("nextWeek");
  332. btn_cur.Text = L.GetString("thisWeek");
  333. startTime = Tools.GetTimeStartByType("Week", DateTime.Now).Value.Date;
  334. endTime = startTime.AddDays(7).AddSeconds(-1);
  335. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  336. break;
  337. case 2:
  338. range = "month";
  339. btn_pre.Text = L.GetString("prevMonth");
  340. btn_next.Text = L.GetString("nextMonth");
  341. btn_cur.Text = L.GetString("thisMonth");
  342. startTime = Tools.GetTimeStartByType("Month", DateTime.Now).Value.Date;
  343. endTime = startTime.AddMonths(1).AddSeconds(-1);
  344. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  345. break;
  346. case 3:
  347. range = "year";
  348. btn_pre.Text = L.GetString("prevYear");
  349. btn_next.Text = L.GetString("nextYear");
  350. btn_cur.Text = L.GetString("thisYear");
  351. startTime = Tools.GetTimeStartByType("Year", DateTime.Now).Value.Date;
  352. endTime = startTime.AddYears(1).AddSeconds(-1);
  353. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  354. break;
  355. }
  356. }
  357. private void btn_range_Click(object sender, EventArgs e)
  358. {
  359. SimpleButton btn = sender as SimpleButton;
  360. switch (btn.Name)
  361. {
  362. case "btn_pre":
  363. switch (cb_range.SelectedIndex)
  364. {
  365. case 0:
  366. startTime = startTime.AddDays(-1);
  367. endTime = startTime.AddDays(1).AddSeconds(-1);
  368. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " 24:00";
  369. break;
  370. case 1:
  371. startTime = startTime.AddDays(-7);
  372. endTime = startTime.AddDays(7).AddSeconds(-1);
  373. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  374. break;
  375. case 2:
  376. startTime = startTime.AddMonths(-1);
  377. endTime = startTime.AddMonths(1).AddSeconds(-1);
  378. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  379. break;
  380. case 3:
  381. startTime = startTime.AddYears(-1);
  382. endTime = startTime.AddYears(1).AddSeconds(-1);
  383. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  384. break;
  385. }
  386. break;
  387. case "btn_next":
  388. switch (cb_range.SelectedIndex)
  389. {
  390. case 0:
  391. startTime = startTime.AddDays(1);
  392. endTime = startTime.AddDays(1).AddSeconds(-1);
  393. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " 24:00";
  394. break;
  395. case 1:
  396. startTime = startTime.AddDays(7);
  397. endTime = startTime.AddDays(8).AddSeconds(-1);
  398. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  399. break;
  400. case 2:
  401. startTime = startTime.AddMonths(1);
  402. endTime = startTime.AddMonths(1).AddSeconds(-1);
  403. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  404. break;
  405. case 3:
  406. startTime = startTime.AddYears(1);
  407. endTime = startTime.AddYears(1).AddSeconds(-1);
  408. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  409. break;
  410. }
  411. break;
  412. case "btn_cur":
  413. switch (cb_range.SelectedIndex)
  414. {
  415. case 0:
  416. startTime = DateTime.Today;
  417. endTime = startTime.AddDays(1).AddSeconds(-1);
  418. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " 24:00";
  419. break;
  420. case 1:
  421. startTime = Tools.GetTimeStartByType("Week", DateTime.Now).Value.Date;
  422. endTime = startTime.AddDays(7).AddSeconds(-1);
  423. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  424. break;
  425. case 2:
  426. startTime = Tools.GetTimeStartByType("Month", DateTime.Now).Value.Date;
  427. endTime = startTime.AddMonths(1).AddSeconds(-1);
  428. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  429. break;
  430. case 3:
  431. startTime = Tools.GetTimeStartByType("Year", DateTime.Now).Value.Date;
  432. endTime = startTime.AddYears(1).AddSeconds(-1);
  433. lbl_range.Text = startTime.ToString("yyyy-MM-dd") + " 0:00 " + L.GetString("to") + " " + endTime.ToString("yyyy-MM-dd") + " 24:00";
  434. break;
  435. }
  436. break;
  437. }
  438. }
  439. private async void btn_search_ClickAsync(object sender, EventArgs e)
  440. {
  441. await BindGridAsync();
  442. }
  443. private void cb_types_SelectedIndexChanged(object sender, EventArgs e)
  444. {
  445. int index = 0;
  446. gridView1.Columns.Clear();
  447. gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn { Name = "col_time", FieldName = "Time", Caption = "时间", Width = 200, VisibleIndex = index, SortOrder = DevExpress.Data.ColumnSortOrder.Ascending });
  448. index++;
  449. switch (cb_types.SelectedIndex)
  450. {
  451. case 0:
  452. type = L.GetString("team");
  453. foreach (var item in teams)
  454. {
  455. gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn { Name = "col_team" + item.Id, Caption = item.Name, FieldName = "team" + item.Id, Width = 200, VisibleIndex = index });
  456. index++;
  457. }
  458. break;
  459. case 1:
  460. type = L.GetString("device");
  461. foreach (var item in devices)
  462. {
  463. gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn { Name = "col_device" + item.Id, Caption = item.Name, FieldName = "device" + item.Id, Width = 200, VisibleIndex = index });
  464. index++;
  465. }
  466. break;
  467. case 2:
  468. type = L.GetString("entrance");
  469. foreach (var item in entrances)
  470. {
  471. gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn { Name = "col_entrance" + item.Id, Caption = item.Name, FieldName = "entrance" + item.Id, Width = 200, VisibleIndex = index });
  472. index++;
  473. }
  474. break;
  475. }
  476. gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn { Name = "col_totalCount", FieldName = "TotalCount", Caption = "斗数小计", Width = 200, VisibleIndex = index });
  477. index++;
  478. gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn { Name = "col_totalWeight", FieldName = "TotalWeight", Caption = "重量小计", Width = 200, VisibleIndex = index });
  479. index++;
  480. }
  481. private void btn_export_Click(object sender, EventArgs e)
  482. {
  483. SaveFileDialog fileDialog = new SaveFileDialog
  484. {
  485. Title = "Export Excel",
  486. Filter = "Excel 97-2003(*.xls)|*.xls|Excel(*.xlsx)|*.xlsx"
  487. };
  488. switch (range)
  489. {
  490. case "day":
  491. fileDialog.FileName = L.GetString("dailyReport");
  492. break;
  493. case "week":
  494. fileDialog.FileName = L.GetString("weeklyReport");
  495. break;
  496. case "month":
  497. fileDialog.FileName = L.GetString("monthlyReport");
  498. break;
  499. case "year":
  500. fileDialog.FileName = L.GetString("annualReport");
  501. break;
  502. default:
  503. break;
  504. }
  505. if (fileDialog.ShowDialog() == DialogResult.OK)
  506. {
  507. try
  508. {
  509. gridControl1.ExportToXls(fileDialog.FileName);
  510. XtraMessageBox.Show(L.GetString("ExportSucceeded"), L.GetString("notification"), MessageBoxButtons.OK, MessageBoxIcon.Information);
  511. }
  512. catch (Exception ex)
  513. {
  514. XtraMessageBox.Show(L.GetString("WeighingFailed") + " Info:" + ex.Message, L.GetString("notification"), MessageBoxButtons.OK, MessageBoxIcon.Error);
  515. }
  516. }
  517. }
  518. private void btnPrint_Click(object sender, EventArgs e)
  519. {
  520. gridView1.SelectRow(-1);
  521. PrintableComponentLink link = new PrintableComponentLink(new PrintingSystem())
  522. {
  523. Component = gridControl1,
  524. Landscape = true,
  525. PaperKind = System.Drawing.Printing.PaperKind.A4,
  526. };
  527. link.CreateMarginalHeaderArea += new CreateAreaEventHandler(Link_CreateMarginalHeaderArea);
  528. link.CreateDocument();
  529. link.ShowPreview();
  530. }
  531. private void Link_CreateMarginalHeaderArea(object sender, CreateAreaEventArgs e)
  532. {
  533. string title = "";
  534. switch (range)
  535. {
  536. case "day":
  537. title = L.GetString("dailyReport");
  538. break;
  539. case "week":
  540. title = L.GetString("weeklyReport");
  541. break;
  542. case "month":
  543. title = L.GetString("monthlyReport");
  544. break;
  545. case "year":
  546. title = L.GetString("annualReport");
  547. break;
  548. }
  549. PageInfoBrick brickTitle = e.Graph.DrawPageInfo(PageInfo.None, title, Color.Black, new RectangleF(0, 0, 100, 30), BorderSide.None);
  550. brickTitle.LineAlignment = BrickAlignment.Center;
  551. brickTitle.Alignment = BrickAlignment.Center;
  552. brickTitle.AutoWidth = true;
  553. brickTitle.Font = new Font("Tahoma", 16f, FontStyle.Bold);
  554. PageInfoBrick brickSubtitle = e.Graph.DrawPageInfo(PageInfo.None, L.GetString("dateRange") + lbl_range.Text, Color.Black, new RectangleF(0, 10, 100, 20), BorderSide.None);
  555. brickSubtitle.LineAlignment = BrickAlignment.Far;
  556. brickSubtitle.Alignment = BrickAlignment.Far;
  557. brickSubtitle.AutoWidth = true;
  558. brickSubtitle.Font = new Font("Tahoma", 9f, FontStyle.Regular);
  559. PageInfoBrick brickType = e.Graph.DrawPageInfo(PageInfo.None, L.GetString("statisticType") + type, Color.Black, new RectangleF(0, 0, 100, 20), BorderSide.None);
  560. brickType.LineAlignment = BrickAlignment.Near;
  561. brickType.Alignment = BrickAlignment.Near;
  562. brickType.AutoWidth = true;
  563. brickType.Font = new Font("Tahoma", 9f, FontStyle.Regular);
  564. }
  565. public static DataTable ToDataTable(List<Dictionary<string, object>> collection)
  566. {
  567. var dt = new DataTable();
  568. if (collection.Count() > 0)
  569. {
  570. dt.Columns.AddRange(collection.First().Select(p => new DataColumn(p.Key, typeof(object))).ToArray());
  571. for (int i = 0; i < collection.Count(); i++)
  572. {
  573. ArrayList tempList = new ArrayList();
  574. foreach (var item in collection[i])
  575. {
  576. tempList.Add(item.Value);
  577. }
  578. dt.LoadDataRow(tempList.ToArray(), true);
  579. }
  580. }
  581. return dt;
  582. }
  583. }
  584. }