frmExcelImpl.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using Infragistics.Win.UltraWinGrid;
  10. using System.IO;
  11. using System.Data.OleDb; //连接Access数据库
  12. using ADOX;
  13. using System.Reflection;
  14. using System.Threading;
  15. using Infragistics.Win;
  16. namespace CreateAccess
  17. {
  18. public partial class frmExcelImpl : Form
  19. {
  20. ServiceReference1.WebServerClient webServer = new ServiceReference1.WebServerClient();
  21. public frmExcelImpl()
  22. {
  23. InitializeComponent();
  24. }
  25. private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
  26. {
  27. switch (e.Tool.Key)
  28. {
  29. case "btnQuery":
  30. {
  31. btnQuery();
  32. break;
  33. }
  34. case "btnImpl":
  35. {
  36. openFileDialog1.Filter = "excel文件|*.xls;*.xlsx";//只允许mdb文件
  37. openFileDialog1.Title = "选择要导入的Excel文件"; //弹出框头部显示
  38. openFileDialog1.AddExtension = true; //自动增加后缀
  39. openFileDialog1.AutoUpgradeEnabled = true; //是否随系统自动升级弹出窗口样式
  40. openFileDialog1.InitialDirectory = Application.StartupPath;//默认打开当前目录
  41. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  42. {
  43. btnImpl(openFileDialog1.FileName);
  44. };
  45. break;
  46. }
  47. default: break;
  48. }
  49. }
  50. private void btnImpl(string fileName)
  51. {
  52. DataTable dt1 = null;
  53. DataTable dt2 = null;
  54. try
  55. {
  56. //Excel.Range oRow = (Excel.Range)_WorkSheet.Cells[row, 1];
  57. //oRow.EntireRow.Delete(Missing.Value);
  58. //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串) //备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反
  59. string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + fileName + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
  60. //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + "Extended Properties=Excel 8.0;";
  61. using (OleDbConnection conn = new OleDbConnection(strConn))
  62. {
  63. conn.Open();
  64. System.Data.DataTable sheetDt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
  65. DataTable dt = sheetDt;
  66. string[] sheet = new string[sheetDt.Rows.Count];
  67. for (int m = 0; m < sheetDt.Rows.Count; m++)
  68. {
  69. sheet[m] = sheetDt.Rows[m]["TABLE_NAME"].ToString();
  70. }
  71. string strExcel = string.Format("select * from [{0}]", sheet[0]);
  72. OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
  73. dt1 = new System.Data.DataTable();
  74. myCommand.Fill(dt1);
  75. strExcel = string.Format("select * from [{0}A2:M{1}]", sheet[0], dt1.Rows.Count + 1);
  76. myCommand = new OleDbDataAdapter(strExcel, strConn);
  77. dt2 = new System.Data.DataTable();
  78. myCommand.Fill(dt2);
  79. conn.Close();
  80. ServiceReference1.meterWorkStorageActual[] lm = new ServiceReference1.meterWorkStorageActual[dt2.Rows.Count];
  81. string preNo = DateTime.Now.ToString("yyyyMMddHHmmssfff");
  82. int i = 0;
  83. foreach (DataRow dr in dt2.Rows)
  84. {
  85. lm[i++] = new ServiceReference1.meterWorkStorageActual
  86. {
  87. predictionNo = preNo,
  88. batchNo = dr["批号"].ToString().Trim(),
  89. valueFlag = dr["无效"].ToString().Trim() == "FALSE" ? "1" : "0",
  90. checkFlag = "0",
  91. //createManNo = dr["计量员编号"].ToString().Trim(),
  92. createManName = dr["计量员"].ToString().Trim(),
  93. createTime = Convert.ToDateTime(dr["日期"].ToString().Trim()),
  94. createTimeSpecified = true,
  95. //productNo = "",s
  96. productName = dr["品名"].ToString().Trim(),
  97. //gradeNo = "",
  98. gradeName = dr["牌号"].ToString().Trim(),
  99. //standardNo = "",
  100. standardName = dr["标准"].ToString().Trim(),
  101. packageNo = dr["包号"].ToString().Trim(),
  102. blockNum = dr["片数"].ToString().Trim(),
  103. productDate = Convert.ToDateTime(dr["日期"].ToString().Trim()),
  104. productDateSpecified = true,
  105. //grossWeight = Convert.ToDecimal(dr["毛重"].ToString().Trim()),
  106. //grossWeightSpecified = true,
  107. //tareWeight = Convert.ToDecimal(dr["毛重"].ToString().Trim()) - Convert.ToDecimal(dr["主称净重"].ToString().Trim()),
  108. //tareWeightSpecified = true,
  109. netWeight = Convert.ToDecimal(dr["主秤净重"].ToString().Trim()),
  110. netWeightSpecified = true,
  111. baseSpotNo = "001034004",
  112. baseSpotName = "镍旧",
  113. memo = dr["二维码"].ToString().Trim(),
  114. actualWeight = Convert.ToDecimal(dr["主秤净重"].ToString().Trim()),
  115. actualWeightSpecified = true,
  116. referWeight = Convert.ToDecimal(dr["副秤净重"].ToString().Trim()),
  117. referWeightSpecified = true,
  118. deleteManName = dr["最终修改人"].ToString().Trim()
  119. };
  120. }
  121. if (lm.Length > 0)
  122. {
  123. ServiceReference1.resTfulResult res = webServer.doAccessCuImpl(lm);
  124. if (res.succeed)
  125. {
  126. MessageBox.Show("导入完成");
  127. btnQuery();
  128. }
  129. else
  130. {
  131. MessageBox.Show("部分数据导入失败");
  132. }
  133. }
  134. }
  135. }
  136. catch (Exception ex)
  137. {
  138. MessageBox.Show("导入失败:" + ex.Message);
  139. System.GC.Collect();
  140. }
  141. }
  142. private void btnQuery()
  143. {
  144. try
  145. {
  146. if (DateTime.Compare(dtStartTime.Value, dtEndTime.Value) > 0)
  147. {
  148. MessageBox.Show("开始时间不能大于结束时间");
  149. return;
  150. }
  151. if ((dtEndTime.Value - dtStartTime.Value).Days > 7)
  152. {
  153. MessageBox.Show("时间跨度不能大于7天");
  154. return;
  155. }
  156. ServiceReference1.commonPage cp = new ServiceReference1.commonPage();
  157. cp.startTime = dtStartTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  158. cp.endTime = dtEndTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  159. cp.param = new ServiceReference1.meterWorkStorageActual { valueFlag = "1", baseSpotNo = cmbPoint.Value?.ToString(), productNo = cmbMatterNo.Text.Trim() };
  160. ServiceReference1.meterWorkStorageActual[] ls = webServer.doQueryTimeWf(cp);
  161. DataTable dt = this.dataTable1.Clone();
  162. if (ls != null && ls.Length > 0)
  163. {
  164. dt = ListToDataTable<ServiceReference1.meterWorkStorageActual>(ls);
  165. }
  166. CopyDataToDatatable(ref dt, ref this.dataTable1, true);
  167. RefreshAndAutoSize(ultraGridSj);
  168. }
  169. catch (Exception ex)
  170. {
  171. MessageBox.Show("查询异常:" + ex.Message);
  172. }
  173. }
  174. #region 控件数据设置
  175. public void RefreshAndAutoSize(UltraGrid ultraGrid)
  176. {
  177. try
  178. {
  179. ultraGrid.BeginUpdate();
  180. foreach (UltraGridBand band in ultraGrid.DisplayLayout.Bands)
  181. {
  182. foreach (UltraGridColumn column in band.Columns)
  183. {
  184. column.PerformAutoResize(PerformAutoSizeType.AllRowsInBand, band.ColHeadersVisible ? true : false);
  185. }
  186. }
  187. }
  188. catch { }
  189. ultraGrid.EndUpdate();
  190. }
  191. public void CopyDataToDatatable(ref DataTable src, ref DataTable dest, bool ClearExists)
  192. {
  193. if (src == null)
  194. {
  195. dest = null;
  196. return;
  197. }
  198. if (dest == null)
  199. {
  200. dest = new DataTable();
  201. }
  202. if (ClearExists)
  203. {
  204. if (dest != null) dest.Rows.Clear();
  205. }
  206. DataRow CurRow, NewRow;
  207. if (src.Rows.Count > 0)
  208. for (int i = 0; i < src.Rows.Count; i++)
  209. {
  210. CurRow = src.Rows[i];
  211. NewRow = dest.NewRow();
  212. for (int j = 0; j < src.Columns.Count; j++)
  213. {
  214. try
  215. {
  216. if (dest.Columns.Contains(src.Columns[j].ColumnName))
  217. {
  218. NewRow[src.Columns[j].ColumnName] = CurRow[j];
  219. }
  220. }
  221. catch { }
  222. }
  223. dest.Rows.Add(NewRow);
  224. }
  225. dest.AcceptChanges();
  226. }
  227. public void SetUltraGridRowFilter(ref UltraGrid myGrid1, bool bAllowFilter)
  228. {
  229. try
  230. {
  231. if (bAllowFilter)
  232. {
  233. if (myGrid1.DisplayLayout.Override.FilterUIType != FilterUIType.FilterRow)
  234. myGrid1.DisplayLayout.Override.FilterUIType = FilterUIType.FilterRow;
  235. for (int i = 0; i < myGrid1.DisplayLayout.Bands.Count; i++)
  236. {
  237. for (int j = 0; j < myGrid1.DisplayLayout.Bands[i].Columns.Count; j++)
  238. {
  239. try
  240. {
  241. if (!myGrid1.DisplayLayout.Bands[i].Columns[j].Hidden && myGrid1.DisplayLayout.Bands[i].Columns[j].RowLayoutColumnInfo.LabelPosition != LabelPosition.LabelOnly)
  242. {
  243. //string sKey = myGrid1.DisplayLayout.Bands[i].Columns[j].Key; //UNCK UNCH
  244. myGrid1.DisplayLayout.Bands[i].Columns[j].AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True;
  245. }
  246. }
  247. catch { }
  248. }
  249. }
  250. }
  251. else
  252. {
  253. if (myGrid1.DisplayLayout.Override.FilterUIType != FilterUIType.HeaderIcons)
  254. myGrid1.DisplayLayout.Override.FilterUIType = FilterUIType.HeaderIcons;
  255. for (int i = 0; i < myGrid1.DisplayLayout.Bands.Count; i++)
  256. {
  257. try
  258. {
  259. myGrid1.DisplayLayout.Bands[i].ColumnFilters.ClearAllFilters();
  260. }
  261. catch { }
  262. for (int j = 0; j < myGrid1.DisplayLayout.Bands[i].Columns.Count; j++)
  263. {
  264. try
  265. {
  266. myGrid1.DisplayLayout.Bands[i].Columns[j].AllowRowFiltering = Infragistics.Win.DefaultableBoolean.False;
  267. }
  268. catch { }
  269. }
  270. }
  271. }
  272. }
  273. catch { }
  274. }
  275. public void SetUltraComboDataSource(UltraCombo cmb, DataTable table, string ColumnValue, string ColumnDisplay)
  276. {
  277. if (table == null || !table.Columns.Contains(ColumnValue) || !table.Columns.Contains(ColumnDisplay)) return;
  278. try
  279. {
  280. if (cmb != null)
  281. {
  282. cmb.DataSource = table;
  283. cmb.DisplayLayout.Override.TipStyleScroll = TipStyle.Hide;
  284. cmb.DisplayLayout.Override.BorderStyleCell = UIElementBorderStyle.None;
  285. cmb.DisplayLayout.Override.BorderStyleRow = UIElementBorderStyle.None;
  286. cmb.DisplayLayout.Override.SelectTypeRow = SelectType.Single;
  287. cmb.DisplayLayout.Override.HeaderStyle = HeaderStyle.Standard;
  288. cmb.DisplayLayout.Override.HeaderAppearance.TextHAlign = HAlign.Center;
  289. cmb.DisplayLayout.Override.RowAppearance.TextVAlign = VAlign.Middle;
  290. cmb.DisplayLayout.Override.ActiveRowAppearance.BackColor = Color.FromArgb(51, 153, 255);
  291. cmb.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.FromArgb(255, 255, 255);
  292. cmb.DisplayLayout.Override.SelectedRowAppearance.BackColor = Color.FromArgb(51, 153, 255);
  293. cmb.DisplayLayout.Override.SelectedRowAppearance.ForeColor = Color.FromArgb(255, 255, 255);
  294. //cmb.DisplayLayout.Override.ActiveRowAppearance.FontData.Bold = DefaultableBoolean.True;
  295. foreach (UltraGridBand band in cmb.DisplayLayout.Bands)
  296. {
  297. band.ColHeadersVisible = false;
  298. foreach (UltraGridColumn column in band.Columns)
  299. {
  300. if (!column.Key.Equals(ColumnDisplay)) column.Hidden = true;
  301. column.Width = cmb.Width;
  302. //column.PerformAutoResize(PerformAutoSizeType.AllRowsInBand);
  303. }
  304. }
  305. cmb.ValueMember = ColumnValue;
  306. cmb.DisplayMember = ColumnDisplay;
  307. cmb.DropDownWidth = -1;
  308. }
  309. }
  310. catch { }
  311. }
  312. public DataTable ListToDataTable<T>(T[] items)
  313. {
  314. DataTable dataTable = new DataTable();
  315. PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
  316. foreach (PropertyInfo prop in Props)
  317. {
  318. dataTable.Columns.Add(prop.Name);
  319. }
  320. foreach (T obj in items)
  321. {
  322. var values = new object[Props.Length];
  323. for (int i = 0; i < Props.Length; i++)
  324. {
  325. values[i] = Props[i].GetValue(obj, null);
  326. }
  327. dataTable.Rows.Add(values);
  328. }
  329. return dataTable;
  330. }
  331. #endregion
  332. private void frmExcelImpl_Load(object sender, EventArgs e)
  333. {
  334. dtStartTime.Value = Convert.ToDateTime((DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00"));
  335. dtEndTime.Value = Convert.ToDateTime((DateTime.Now.ToString("yyyy-MM-dd") + " 23:59:59"));
  336. SetUltraGridRowFilter(ref ultraGridSj, true);
  337. #region
  338. /*
  339. ServiceReference1.comBaseInfo cp = new ServiceReference1.comBaseInfo();
  340. cp.validFlag = "1";
  341. cp.pBaseCode = "001025";
  342. ServiceReference1.comBaseInfo[] ls = webServer.doQueryComBaseInfoWf(cp);
  343. if (ls != null && ls.Length > 0)
  344. {
  345. SetUltraComboDataSource(cmbMatterNo, ListToDataTable<ServiceReference1.comBaseInfo>(ls), "baseCode", "baseName");
  346. }
  347. else
  348. {
  349. MessageBox.Show("产品信息载入失败");
  350. return;
  351. }
  352. //*/
  353. ServiceReference1.comBaseInfo co = new ServiceReference1.comBaseInfo();
  354. co.validFlag = "1";
  355. co.pBaseCode = "001034";
  356. ServiceReference1.comBaseInfo[] lo = webServer.doQueryComBaseInfoWf(co);
  357. if (lo != null && lo.Length > 0)
  358. {
  359. SetUltraComboDataSource(cmbPoint, ListToDataTable<ServiceReference1.comBaseInfo>(lo), "baseCode", "baseName");
  360. }
  361. else
  362. {
  363. MessageBox.Show("计量点载入失败");
  364. return;
  365. }
  366. #endregion
  367. }
  368. }
  369. }