/*=================================================================== * 程序说明: MES_LINE的数据管理窗体 * 作者资料: 孙中吕 * 创建日期: 2024/05/30 04:02:30 * 最后修改: 2024/05/30 04:02:30 * * 注: 本文件由代码生成器(Code Generator)自动生成。 * 版权所有 Copyright 2006~2024, C/S框架网(www.cscode.net) *===================================================================*/ using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Interfaces; using CSFrameworkV5.Library; using CSFrameworkV5.Library.CommonClass; using CSFrameworkV5.Models; using DevExpress.XtraEditors; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; using System; using System.Data; using System.Windows.Forms; namespace CSFrameworkV5.Order { /// /// MES_LINE的资料管理窗体,由代码生成器(Code Generator)自动生成 /// public partial class frmMES_LINE : frmBaseBusinessForm { private bllMES_LINE _BLLInstance; //业务逻辑层对象引用 public frmMES_LINE() { InitializeComponent(); } private void frmMES_LINE_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_LINE order by LINE_NO 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 bllMES_LINE(); //实例化基类的业务逻辑层 _BLLInstance = _BLL as bllMES_LINE; //当前窗体的业务层逻辑层对象引用 _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事件 #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); //设置明细表格的按钮禁用和可用状态 txtCreatedBy.Properties.ReadOnly = true; //禁止修改 txtCreationDate.Properties.ReadOnly = true; //禁止修改 } //有明细表:绑定单据明细表的数据源. protected override void DoBindingDetailGrid(DataSet dataSource) { } /// /// 绑定【编辑页面】所有文本输入框的数据源 /// /// 数据源 protected override void DoBindingSummaryEditor(DataTable summary) { DoBindingEditorPanel(pcDetailEditor, summary); //在此绑定其它自定义组件的数据源,参考frmCustomer的DoBindingSummaryEditor方法 } public override void DoAdd(IButtonInfo sender) { base.DoAdd(sender); if (_UpdateType == UpdateType.Add) { //创建人 txtCreatedBy.Properties.ReadOnly = true; txtCreatedBy.Enabled = false; var user = Loginer.CurrentUser.Account; SetEditorBindingValue(txtCreatedBy, user, true); //创建时间 var time = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); txtCreationDate.Properties.ReadOnly = true; txtCreationDate.Enabled = false; SetEditorBindingValue(txtCreationDate, time, true); } } //创建一条明细记录 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); //创建用于保存的临时数据 if (dsTemplate == null) return; var result = _BLL.Update(dsTemplate); //调用业务逻辑层Update()方法保存数据 if (result.Success) //保存成功, 不需要重新加载数据,更新缓存数据即可. { if (_UpdateType == UpdateType.Add) _BLL.DataBindRow[MES_LINE.__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_LINE { LINE_NO = "", LINE_NAME = "" }; 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_LINE()); 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); } } }