/*=================================================================== * 程序说明: OverdueMaterial的数据管理窗体 * 作者资料: 孙中吕 * 创建日期: 2024/05/23 03:50:28 * 最后修改: 2024/05/23 03:50:28 * * 注: 本文件由代码生成器(Code Generator)自动生成。 * 版权所有 Copyright 2006~2024, C/S框架网(www.cscode.net) *===================================================================*/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.IO; using System.Linq; using System.Windows.Forms; using CSFramework.DB; using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Interfaces; using CSFrameworkV5.Library; using CSFrameworkV5.Library.CommonClass; using CSFrameworkV5.Models; using CSFrameworkV5.QL.ql; using DevExpress.XtraEditors; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; namespace CSFrameworkV5.QL { /// /// OverdueMaterial的资料管理窗体,由代码生成器(Code Generator)自动生成 /// public partial class frmOverdueMaterial : frmBaseBusinessForm { private bllOverdueMaterial _BLLInstance; //业务逻辑层对象引用 public frmOverdueMaterial() { InitializeComponent(); } private void frmOverdueMaterial_Load(object sender, EventArgs e) { InitializeForm(); //自定义初始化操作 Init(); //筛选框 gvSummary.OptionsView.ShowGroupPanel = false; gvSummary.OptionsView.ShowAutoFilterRow = true; if (splitContainerEditorAndDetailGrid != null && layoutGroup.OptionsTableLayoutGroup.RowDefinitions.Count != 0) splitContainerEditorAndDetailGrid.SplitterPosition = Convert.ToInt32(Math.Round( layoutGroup.OptionsTableLayoutGroup.RowDefinitions .Count * layoutGroup.OptionsTableLayoutGroup .RowDefinitions[0].Height, 0)) + 30; if (splitContainerSearchAndSummary != null && layoutGroupSearch .OptionsTableLayoutGroup.RowDefinitions .Count != 0) splitContainerSearchAndSummary.SplitterPosition = Convert.ToInt32(Math.Round( (layoutGroupSearch.OptionsTableLayoutGroup .RowDefinitions.Count - 1) * layoutGroupSearch.OptionsTableLayoutGroup .RowDefinitions[0].Height, 0)) + 60; } private void Init() { var sql = "select * from OverdueMaterial order by ID desc offset 0 rows fetch next 100 rows only"; var dt = _BLLInstance.GETDAT(sql); DoBindingSummaryGrid(dt); //绑定主表的Grid ShowSummaryPage(true); //显示Summary页面. } protected override void InitializeForm() { _BLL = new bllOverdueMaterial(); //实例化基类的业务逻辑层 _BLLInstance = _BLL as bllOverdueMaterial; //当前窗体的业务层逻辑层对象引用 _SummaryView = new DevGridView( gvSummary); //实例化数据视图,此接口可支持不同的视图,比如表格GridControl,树视图TreeList. //_ActiveEditor = txtID;//进入修改状态,显示第一个焦点的输入框,可以不设置 //_KeyEditor = txtID;//主键字段输入框,可以不设置 _DetailGroupControl = pcDetailEditor; //【资料编辑】页面所有文本输入框的容器 base.InitializeForm(); //picNote.Image = Globals.LoadImage("32_Notes.png"); frmGridCustomize.RegisterGrid(gvSummary); //注册表格组件,自动添加样式管理、弹出菜单 DevStyle.SetGridControlLayout(gcSummary, false); //主表表格样式设置 DevStyle.SetSummaryGridViewLayout(gvSummary); //主表表格样式设置 BindingSummaryNavigator(controlNavigatorSummary, gcSummary); //绑定表格导航按钮的数据源. gvSummary.DoubleClick += new EventHandler(OnGridViewDoubleClick); //绑定主表的DoubleClick事件 // DevStyle.SetGridControlLayout(this.gcDetail0, true); //明细表表格样式设置 // DevStyle.SetDetailGridViewLayout(this.gvDetail0); //明细表表格样式设置 //this.gcDetail0.EmbeddedNavigator.ButtonClick += // new NavigatorButtonClickEventHandler(this // .OnEmbeddedNavigatorButtonClick); //绑定明细表格的按钮事件 //this.gvDetail0.CellValueChanged += // new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler( // OnCellValueChanged); //绑定明细表格单元格数据修改时触发的事件 #region 以下代码全自动生成,请调整排版和顺序 #endregion ShowSummaryPage(true); //初始化完成后显示表格页 } #region 自动生成的事件或方法的主体部份 #endregion //修改单元格数据时触发的事件 private void OnCellValueChanged(object sender, CellValueChangedEventArgs e) { //开发实例:修改单元格关联更新其它列的值 //参考(frmPO/frmSO).OnCellValueChanged方法} } /// /// 明细表格按钮事件 /// /// /// private void OnEmbeddedNavigatorButtonClick(object sender, NavigatorButtonClickEventArgs e) { try { var gc = (GridControl)((GridControlNavigator)sender).Parent; var gridView = (GridView)gc.Views[0]; //每个GridControl默认有一个GridView. if (e.Button.ImageIndex == DetailButtons.Add || e.Button.ImageIndex == DetailButtons.Insert) CreateOneDetail(gridView, e.Button.ImageIndex); else if (e.Button == gc.EmbeddedNavigator.Buttons.CustomButtons[ DetailButtons.Delete]) if (Msg.AskQuestion("确定要删除这条记录?")) gridView.DeleteRow(gridView.FocusedRowHandle); e.Handled = true; } catch (Exception ex) { LogUserOperate.Write(ex); Msg.ShowException(ex); } } /// /// 重要!!当按钮状态改变时触发的事件, /// /// protected override void ButtonStateChanged(UpdateType currentState) { var isEditMode = currentState == UpdateType.Add || currentState == UpdateType.Modify; //设置编辑页面的文本框控件只读和可编辑状态 SetDetailEditorsAccessable(pcDetailEditor, isEditMode); //设置明细表格的按钮禁用和可用状态 // base.SetGridCustomButtonAccessable(this.gcDetail0, isEditMode); ////设置明细表格的可修改状态 // this.gvDetail0.OptionsBehavior.Editable = isEditMode; // lbStateName.Text = this.UpdateTypeName; } //有明细表:绑定单据明细表的数据源. protected override void DoBindingDetailGrid(DataSet dataSource) { //this.gcDetail0.DataSource = null; //this.gcDetail0.DataSource = // dataSource.Tables[XjImagePath.__TableName]; } /// /// 绑定【编辑页面】所有文本输入框的数据源 /// /// 数据源 protected override void DoBindingSummaryEditor(DataTable summary) { DoBindingEditorPanel(pcDetailEditor, summary); //在此绑定其它自定义组件的数据源,参考frmCustomer的DoBindingSummaryEditor方法 } public override void DoAdd(IButtonInfo sender) { base.DoAdd(sender); if (_UpdateType == UpdateType.Add) { // 在此添加所需的代码 } } //创建一条明细记录 private void CreateOneDetail(GridView gridView, int buttonIndex) { var gridControl = gridView.GridControl; var detailTableName = (string)gridView.Tag; //若要取排序序号,要将光标移到最后一行 if (buttonIndex == DetailButtons.Add) gridView.MoveLast(); //若表格无记录,转换为新增状态 if (gridView.RowCount == 0) buttonIndex = DetailButtons.Add; var row = _BLL.CurrentBusiness.Tables[detailTableName].NewRow(); row["ID"] = Guid.NewGuid(); row["PID"] = _BLL.DataBindRow["ID"]; //增加一条明细记录 if (buttonIndex == DetailButtons.Add) { _BLL.CurrentBusiness.Tables[detailTableName].Rows.Add(row); gridControl.RefreshDataSource(); //立即刷新数据源 gridView.FocusedRowHandle = gridView.RowCount - 1; //光标移到到最后一条记录 } else if (buttonIndex == DetailButtons.Insert) //插入一条明细记录 { _BLL.CurrentBusiness.Tables[detailTableName].Rows .InsertAt(row, gridView.FocusedRowHandle); gridView.FocusedRowHandle = gridView.FocusedRowHandle - 1; } gridView.FocusedColumn = gridView.VisibleColumns[0]; } public override void DoSave(IButtonInfo sender) // 保存数据 { UpdateLastControl(); //更新最后一个文本输入框的数据 try { frmWaitingEx.ShowMe(this); var dsTemplate = _BLL.CreateSaveData(_BLL.CurrentBusiness); //创建用于保存的临时数据 var result = _BLL.Update(dsTemplate); //调用业务逻辑层Update()方法保存数据 if (result.Success) //保存成功, 不需要重新加载数据,更新缓存数据即可. { if (_UpdateType == UpdateType.Add) _BLL.DataBindRow[OverdueMaterial.__KeyName] = result.DocNo; //更新单据号码 if (_UpdateType == UpdateType.Modify) _BLL.NotifyUser(); //发送短信或Email通知制单人 UpdateSummaryCurrentRow(_BLL .DataBindRow); //刷新表格当前记录的缓存数据. DoBindingSummaryEditor(_BLL .DataBinder); //重新绑定文本框的数据源,刷新数据 if (_UpdateType == UpdateType.Add) gvSummary.MoveLast(); //若是新增操作,要移动到取后一条记录. base.DoSave(sender); //调用基类的方法. 此行代码应放较后位置. frmWaitingEx.HideMe(this); Msg.ShowInformation("保存成功!"); } else { Msg.Warning("保存失败!"); } } finally { frmWaitingEx.HideMe(this); } } /// /// 保存数据后,更新表格中当前记录的数据(更新缓存资料) /// /// 当前修改的记录 /// 当前单据号码 protected void UpdateSummaryCurrentRow(DataRow currentRow) { //若表格没有数据源,要下载当前单据的数据 if (gcSummary.DataSource == null || gvSummary.RowCount == 0) { //实例化查询参数 var P = new QueryOverdueMaterial { OrderNumber = "", ProductName = "", ShortageName = "", ResponsiblePerson = "" }; var dt = _BLLInstance.Query(P); //获取数据 DoBindingSummaryGrid(dt); //绑定主表表格的数据源 } else { //调用基类方法更新表格中当前记录的缓存数据 base.UpdateSummaryRow(currentRow); } } private void btnEmpty_Click(object sender, EventArgs e) { ClearContainerEditorText(pnlSearch); } private void btnQuery_Click(object sender, EventArgs e) { //查询数据 try { frmWaitingEx.ShowMe(this); //实例化查询参数 var dt = _BLLInstance.Query(new QueryOverdueMaterial()); DoBindingSummaryGrid(dt); //绑定主表的Grid ShowSummaryPage(true); //显示Summary页面. if (gvSummary.RowCount == 0) Msg.Warning("没有找到数据!"); } finally { frmWaitingEx.HideMe(this); } } //给明细表绑定KeyDown事件,控制按回车事件 private void gvDetail_KeyDown(object sender, KeyEventArgs e) { var gridView = (GridView)sender; //表格按回车键自动跳转到下一个可编辑列, 若是最后一列,自动新增一条记录 GridMovetor.OnGridViewKeyDown(gridView, e); } private void txtOnlineDate_EditValueChanged(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtOnlineDate.EditValue.ToString())) { var formattedDate = DateTime .Parse(txtOnlineDate.EditValue.ToString()) .ToString("yyyy-MM-dd"); SetEditorBindingValue(txtOnlineDate, formattedDate.ToString(), true); } } private void txtRequiredArrivalDate_EditValueChanged(object sender, EventArgs e) { if (!string.IsNullOrEmpty( txtRequiredArrivalDate.EditValue.ToString())) { var formattedDate = DateTime .Parse(txtRequiredArrivalDate.EditValue.ToString()) .ToString("yyyy-MM-dd"); SetEditorBindingValue(txtRequiredArrivalDate, formattedDate.ToString(), true); } } private void txtDeliveryDate_EditValueChanged(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtDeliveryDate.EditValue.ToString())) { var formattedDate = DateTime .Parse(txtDeliveryDate.EditValue.ToString()) .ToString("yyyy-MM-dd"); SetEditorBindingValue(txtDeliveryDate, formattedDate.ToString(), true); } } private void txtOverdueDate_EditValueChanged(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtOverdueDate.EditValue.ToString())) { var formattedDate = DateTime .Parse(txtOverdueDate.EditValue.ToString()) .ToString("yyyy-MM-dd"); SetEditorBindingValue(txtOverdueDate, formattedDate.ToString(), true); } } private void simpleButton1_Click(object sender, EventArgs e) { try { if (buttonEdit1.Text == "") { Msg.Warning("请先选择文件!!!"); return; } var result = MessageBox.Show("你确定要执行导入吗?这样会清空原有的数据", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { var DllNameT = ""; var DllName = ""; var list = new List(); try { DllNameT = buttonEdit1.Text; DllName = DllNameT .Substring(DllNameT.LastIndexOf("\\") + 1) .ToString(); //Console.OutputEncoding = System.Text.Encoding.UTF8; IWorkbook workbook = null; using (var file = new FileStream(DllNameT, FileMode.Open, FileAccess.Read)) { if (DllName.IndexOf(".xlsx") > 0) // 2007及以后版本 workbook = new XSSFWorkbook(file); else if (DllName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(file); } var db1 = SqlSugarHelper.GetInstance(); var date = DateTime.Now.ToString("yyyyMMdd"); //NumberOfSheets sheet的总数,要注意是否有隐藏的sheet for (var sheetNum = 0; sheetNum < workbook.NumberOfSheets; sheetNum++) { var sheet = workbook.GetSheetAt(sheetNum); var rows = sheet.GetRowEnumerator(); var headerRow = sheet.GetRow(sheet.FirstRowNum); int cellCount = headerRow.LastCellNum; //读取body for (var i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++) { var order = new SqlOverdueMaterial(); order.ID = GetUniqueIDTO22(); var row = sheet.GetRow(i); //DataRow dataRow = dt.NewRow(); //for (int j = row.FirstCellNum; j < cellCount; j++) for (var j = 0; j < cellCount; j++) switch (j) { case 0: order.CustomerAbbreviation = row.GetCell(j).ToString(); break; case 1: order.OrderNumber = row.GetCell(j).ToString(); break; case 2: order.ProductName = row.GetCell(j).ToString(); break; case 3: order.ProductModel = row.GetCell(j).ToString(); break; case 4: order.OrderQuantity = Convert.ToInt32(row.GetCell(j) .ToString()); break; case 5: order.DeliveryDate = row.GetCell(j).ToString(); break; case 6: order.OnlineDate = row.GetCell(j).ToString(); break; case 7: order.ShortageName = row.GetCell(j).ToString(); break; case 8: order.ShortageNumber = row.GetCell(j).ToString(); break; case 9: order.ShortageQuantity = Convert.ToInt32(row.GetCell(j) .ToString()); break; case 10: order.Unit = row.GetCell(j).ToString(); break; case 11: order.RequiredArrivalDate = row.GetCell(j).ToString(); break; case 12: order.OverdueDate = row.GetCell(j).ToString(); break; case 13: order.ResponsiblePerson = row.GetCell(j).ToString(); break; } list.Add(order); } SqlSugarHelper.UseTransactionWithOracle(db => { var count = db.Queryable() .Count(); var executeCommand = db.Deleteable() .ExecuteCommand(); if (executeCommand == count) return db .Insertable(list) .ExecuteCommand(); return 0; }); } } catch (Exception EE) { Msg.Warning(EE.Message.ToString()); return; } // TestUpload(); Msg.Warning("上传成功!!!"); buttonEdit1.Text = ""; var dt = _BLLInstance.Query(new QueryOverdueMaterial()); DoBindingSummaryGrid(dt); //绑定主表的Grid ShowSummaryPage(true); //显示Summary页面. if (gvSummary.RowCount == 0) Msg.Warning("没有找到数据!"); } } catch (Exception ex) { Msg.Warning(ex.ToString()); throw; } } private void buttonEdit1_Click(object sender, EventArgs e) { var dlg = new OpenFileDialog(); dlg.Filter = "所有EXCEL文件|*.xlsx;*.xls"; dlg.FileName = "EXCEL文件"; if (DialogResult.OK == dlg.ShowDialog()) buttonEdit1.Text = dlg.FileName; } private string GetUniqueIDTO22() { //System.Threading.Thread.Sleep(1); //保证yyyyMMddHHmmssffff唯一 var rd = new Random( BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0)); var strUniqueID = DateTime.Now.ToString("yyyyMMddHHmmssffff") + rd.Next(1000, 9999); return strUniqueID; } } }