/*=================================================================== * 程序说明: MES_Order的数据管理窗体 * 作者资料: 孙中吕 * 创建日期: 2024/05/21 03:13:43 * 最后修改: 2024/05/21 03:13:43 * * 注: 本文件由代码生成器(Code Generator)自动生成。 * 版权所有 Copyright 2006~2024, C/S框架网(www.cscode.net) *===================================================================*/ 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.Order; using CSFrameworkV5.WorkOrder.workOrder; using DevExpress.XtraEditors; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; using System; using System.Data; using System.Drawing; using System.IO; using System.Windows.Forms; namespace CSFrameworkV5.WorkOrder { /// /// MES_Order的资料管理窗体,由代码生成器(Code Generator)自动生成 /// public partial class frmWorkOrder : frmBaseBusinessForm { private bllWorkOrder _BLLInstance; //业务逻辑层对象引用 private DataTable tbWL = new DataTable(); // private FrmPictViwe_DELETE frmPictViwe; public frmWorkOrder() { InitializeComponent(); _BLLInstance = new bllWorkOrder(); var sqlstr = "select DAA001 工单号,DAA014 产品编码,DAA015 产品名称,DAA016 规格,DAA027 数量 from WOMDAA where DAA022 in (N'新建',N'下达')"; tbWL = _BLLInstance.GETDAT(sqlstr); txtdaa001.Properties.ValueMember = "工单号"; txtdaa001.Properties.DisplayMember = "工单号"; txtdaa001.Properties.ShowClearButton = false; txtdaa001.Properties.DataSource = tbWL; } private void frmWorkOrder_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 MES_Order 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 bllWorkOrder(); //实例化基类的业务逻辑层 _BLLInstance = _BLL as bllWorkOrder; //当前窗体的业务层逻辑层对象引用 _SummaryView = new DevGridView( gvSummary); //实例化数据视图,此接口可支持不同的视图,比如表格GridControl,树视图TreeList. //_ActiveEditor = txtid;//进入修改状态,显示第一个焦点的输入框,可以不设置 //_KeyEditor = txtid;//主键字段输入框,可以不设置 _DetailGroupControl = pcDetailEditor; //【资料编辑】页面所有文本输入框的容器 base.InitializeForm(); frmGridCustomize.RegisterGrid(gvSummary); //注册表格组件,自动添加样式管理、弹出菜单 DevStyle.SetGridControlLayout(gcSummary, false); //主表表格样式设置 DevStyle.SetSummaryGridViewLayout(gvSummary); //主表表格样式设置 BindingSummaryNavigator(controlNavigatorSummary, gcSummary); //绑定表格导航按钮的数据源. gvSummary.DoubleClick += new EventHandler(OnGridViewDoubleClick); //绑定主表的DoubleClick事件 DevStyle.SetGridControlLayout(gcDetail0, true); //明细表表格样式设置 DevStyle.SetDetailGridViewLayout(gvDetail0); //明细表表格样式设置 gcDetail0.EmbeddedNavigator.ButtonClick += new NavigatorButtonClickEventHandler( OnEmbeddedNavigatorButtonClick); //绑定明细表格的按钮事件 gvDetail0.CellValueChanged += new CellValueChangedEventHandler( OnCellValueChanged); //绑定明细表格单元格数据修改时触发的事件 ShowSummaryPage(true); //初始化完成后显示表格页 } //修改单元格数据时触发的事件 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); //设置明细表格的按钮禁用和可用状态 SetGridCustomButtonAccessable(gcDetail0, isEditMode); //设置明细表格的可修改状态 gvDetail0.OptionsBehavior.Editable = isEditMode; } //有明细表:绑定单据明细表的数据源. protected override void DoBindingDetailGrid(DataSet dataSource) { gcDetail0.DataSource = null; gcDetail0.DataSource = dataSource.Tables[DA01IMAGE.__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) { //创建人 CreatedByTxt.Properties.ReadOnly = true; CreatedByTxt.Enabled = false; var user = Loginer.CurrentUser.Account; SetEditorBindingValue(CreatedByTxt, user, true); //创建时间 var time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); CreateDateTxt.Properties.ReadOnly = true; CreateDateTxt.Enabled = false; SetEditorBindingValue(CreateDateTxt, time, true); } } // public override void DoEdit(IButtonInfo sender) // { // base.DoEdit(sender); // if (_UpdateType == UpdateType.Modify) // { // // } // } //创建一条明细记录 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[MES_Order.__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 QueryMES_Order { daa001 = "", create_by = "" }; 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 QueryMES_Order()); 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 txtdaa001_Properties_EditValueChanged(object sender, EventArgs e) { } private void simpleButton1_Click(object sender, EventArgs e) { try { if (buttonEdit1.Text == "") { buttonEdit1.Focus(); Msg.Warning("请先选择图片!!!"); return; } try { if (buttonEdit1.Text == "") { buttonEdit1.Focus(); Msg.Warning("该物料没有正式图纸,请上传!!!"); return; } var db = SqlSugarHelper.GetInstance(); var entity = new SqlD01Image(); entity.Id = Guid.NewGuid().ToString(); //创建时间 entity.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); entity.CreateBy = Loginer.CurrentUser.Account; var mesOrder = db.Queryable() .Single(s => s.Daa001 == txtdaa001.EditValue); if (mesOrder != null) { entity.Pid = mesOrder.id; } else { Msg.Warning("请先保存然后再进行图纸上传"); return; } using (var msReader = new MemoryStream()) { using (var fs = new FileStream( buttonEdit1.Text, FileMode.Open)) { var buffer = new byte[1024]; var readLen = 0; while ((readLen = fs.Read(buffer, 0, buffer.Length)) > 0) msReader.Write(buffer, 0, readLen); } entity.Image = Convert.ToBase64String( msReader.ToArray()); } var command = SqlSugarHelper.UseTransactionWithOracle(s => s.Insertable(entity).ExecuteCommand()); //TOD 图片插入后回显到表格中 if (command > 0) { var dt = _BLLInstance.GETDAT( "select * from DA01IMAGE where pid = '" + entity.Pid + "'"); gcDetail0.DataSource = dt; } else { Msg.Warning("上传失败"); return; } } catch (Exception EE) { Msg.Warning(EE.Message.ToString()); return; } // TestUpload(); Msg.Warning("上传成功!!!"); buttonEdit1.Text = ""; } catch (Exception ex) { Msg.Warning(ex.ToString()); throw; } } private void buttonEdit1_Click(object sender, EventArgs e) { var dlg = new OpenFileDialog(); dlg.Filter = "所有图像文件|*.jpg;*.gif"; dlg.FileName = "图像文件"; if (DialogResult.OK == dlg.ShowDialog()) buttonEdit1.Text = dlg.FileName; } private void CreateDateTxt_EditValueChanged(object sender, EventArgs e) { if (!string.IsNullOrEmpty(CreateDateTxt.EditValue.ToString())) { var formattedDate = DateTime .Parse(CreateDateTxt.EditValue.ToString()) .ToString("yyyy-MM-dd"); SetEditorBindingValue(CreateDateTxt, formattedDate.ToString(), true); } } private void gvSummary_RowClick(object sender, RowClickEventArgs e) { } private void FrmPictViwe_FormClosedEvent(object sender, EventArgs e) { frmWaitingEx.ShowMe(this); var db = SqlSugarHelper.GetInstance(); var sqlMesOrder = db.Queryable() .Where(s => s.Daa001 == txtdaa001.Text).Single(); var sq = "select * from DA01IMAGE where pid = '" + sqlMesOrder.id + "'"; var tb = _BLLInstance.GETDAT(sq); gcDetail0.DataSource = tb; frmWaitingEx.HideMe(this); frmPictViwe.FormClosedEvent -= FrmPictViwe_FormClosedEvent; } private void gvDetail0_RowClick(object sender, RowClickEventArgs e) { if (e.RowHandle >= 0) { var hInfo = gvDetail0.CalcHitInfo(new Point(e.X, e.Y)); try { // gvDetail0.DataSource //根据下标获取行数据 var dataRow = gvDetail0.GetDataRow(e.RowHandle); //取出id列 var id = dataRow.ItemArray[0].ToString(); var db = SqlSugarHelper.GetInstance(); var sqlD01Image = db.Queryable() .Where(s => s.Id == id).Single(); if (sqlD01Image == null) return; var ms = new MemoryStream( Convert.FromBase64String(sqlD01Image.Image)); var img = Image.FromStream(ms); frmPictViwe = new FrmPictViwe_DELETE(img, txtdaa001.Text, id); frmPictViwe.FormClosedEvent += FrmPictViwe_FormClosedEvent; frmPictViwe.Show(); } catch (Exception ex) { Msg.Warning(ex.Message); } } } } }