#region using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Library; using CSFrameworkV5.Library.CommonClass; using CSFrameworkV5.Models; using DevExpress.XtraEditors; #endregion namespace CSFrameworkV5.SystemModule { public partial class frmDocNoRule : frmBaseDataDictionary, IFormGridPermission { private bllDocNoRule _BLLInstance; public frmDocNoRule() { InitializeComponent(); } public List GetGrids() { var list = new List(); list.Add(new GridPermissionItem("单据编码规则", gvSummary)); return list; } public void SetGridsPermission() { GridPermissionConfig.SetPermission(gvSummary); } protected override void ButtonStateChanged(UpdateType currentState) //按钮状态改变时触发的事件 { base.ButtonStateChanged(currentState); txtCreationDate.Properties.ReadOnly = true; //禁止修改 txtCreatedBy.Properties.ReadOnly = true; //禁止修改 txtCurrentValue.Enabled = false; txtDocCode.Enabled = currentState == UpdateType.Add; txtFlagSpilitNo.Enabled = IsAddOrEditMode; txtFlagIncludeDocCode.Enabled = IsAddOrEditMode; _txtPrefix.Properties.ReadOnly = true; } public override void DoAdd(IButtonInfo sender) { base.DoAdd(sender); if (IsAddMode) { _BLLInstance.DataBinderRow[sys_DocNoRule.RowID] = Globals.NewRowID(); SetEditorBindingValue(txtCreatedBy, Loginer.CurrentUser.Account, true); SetEditorBindingValue(txtCreationDate, DateTime.Now, true); SetEditorBindingValue(txxtItem1, "<年年年年>", true); SetEditorBindingValue(txxtItem2, "", true); SetEditorBindingValue(txxtItem3, "", true); SetEditorBindingValue(txxtItem4, "", true); SetEditorBindingValue(txtCurrentValue, "0", true); SetEditorBindingValue(txtNoLength, "8", true); SetEditorBindingValue(txtResetZero, "归零", true); SetEditorBindingValue(txtFlagIncludeDocCode, "Y", true); SetEditorBindingValue(txtFlagSpilitNo, "N", true); OnConfigItemChanged(); } } public override bool DoBeforeDelete(ref string keyValue) { AssertFocusedRow(); //检查是否选择一条记录 //调用业务逻辑类删除记录 var summary = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle); keyValue = summary[_BLL.KeyFieldName].ToStringEx(); //主键值 return Msg.AskQuestion("确定要删除当前记录吗?"); } /// /// 绑定修改页面中所有输入框的数据源 /// /// 数据源 protected override void DoBindingSummaryEditor(DataTable summary) { DoBindingEditorPanel(pcDetailEditor, summary); //在此可绑定其它自定义的输入框,参考frmCustomer的DoBindingSummaryEditor方法 DataBinder.BindingTextEdit(txtRuleFormat, summary, sys_DocNoRule.RuleFormat); DataBinder.BindingCheckEdit(txtFlagSpilitNo, summary, sys_DocNoRule.FlagSpilitNo); DataBinder.BindingCheckEdit(txtFlagIncludeDocCode, summary, sys_DocNoRule.FlagIncludeDocCode); } public override void DoDelete(IButtonInfo sender) { var keyValue = ""; if (false == DoBeforeDelete(ref keyValue)) return; var b = _BLLInstance.Delete(txt_DataSet.EditValue.ToStringEx(), keyValue); AssertEqual(b, true, "删除记录时发生错误!"); DeleteSummaryRow(_SummaryView.FocusedRowHandle); //删除Summary资料行 if (_SummaryView.FocusedRowHandle < 0) //删除了最後一条记录. 显示Summary页面. { ShowSummaryPage(true); } else { keyValue = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[ sys_DocNoRule.RowID].ToStringEx(); _BLLInstance.CreateDataBinder( txt_DataSet.EditValue.ToStringEx(), keyValue); DoBindingSummaryEditor(_BLL .DataBinder); //显示主表记录详细资料 } //最后处理自定义方法 DoAfterDelete(keyValue); } private void DoPreviewCode() { if (txtRuleFormat.Text == "") { lblPreview.Text = "请定义规则."; } else { // txtRuleFormat="<年年>", "<年年年年>", "<月月>", "<日日>" }); var preview = txtRuleFormat.Text; var length = ConvertEx.ToInt(txtNoLength.Text); if (length == 0) length = 5; var docCode = ""; if (txtFlagIncludeDocCode.Checked) docCode = txtDocCode.EditValue.ToStringEx(); preview = docCode + preview; preview = preview.Replace("<无>", ""); preview = preview.Replace("<年年年年>", "2017"); preview = preview.Replace("<年年>", "17"); preview = preview.Replace("<月月>", "06"); preview = preview.Replace("<日日>", "18"); preview = preview + (txtFlagSpilitNo.Checked ? "-" : "") + "8".PadLeft(length, '0'); lblPreview.Text = "生成编号:" + preview; _txtPrefix.Text = txtDocCode.EditValue.ToStringEx(); } } public override void DoSave(IButtonInfo sender) { UpdateLastControl(); //更新最后一个输入控件的数据 if (!ValidatingData()) return; //检查输入完整性 var ret = _BLLInstance.UpdateToDB(txt_DataSet.EditValue .ToStringEx()); //调用业务逻辑层的Update方法提交数据 if (ret) { DoAfterSave(_BLL.DataBinder); //只有修改状态生成日志 //if (_UpdateType == UpdateType.Modify) _BLL.WriteLog(original, _BLL.DataBinder); //保存修改日志 var key = ConvertEx.ToString( _BLL.DataBinder.Rows[0][_BLL.KeyFieldName]); var dt = _BLLInstance.GetDataByKey( txt_DataSet.EditValue.ToStringEx(), key); //保存后查询数据 if (dt.Rows.Count > 0) { UpdateSummaryRow( dt.Rows[ 0]); //刷新表格内的数据. DoSave_ResetState(); } else { Msg.Warning( "当前记录已被其它用户删除,刷新数据失败!\r\n程序:frmBaseDataDictionary.DoSave()"); } } else { Msg.Warning("保存失败!"); } if (IsViewMode) DoShowConfigItem(); } private void DoShowConfigItem() { if (txtRuleFormat.Text != "") { var tmp = txtRuleFormat.Text.Replace("><", ">|<"); var items = tmp.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); txxtItem1.Text = items.Length > 0 ? items[0] : ""; txxtItem2.Text = items.Length > 1 ? items[1] : ""; txxtItem3.Text = items.Length > 2 ? items[2] : ""; txxtItem4.Text = items.Length > 3 ? items[3] : ""; } } public override void DoViewContent(IButtonInfo sender) { AssertFocusedRow(); //检查有无记录. var keyValue = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[ sys_DocNoRule.RowID].ToStringEx(); _BLLInstance.CreateDataBinder(txt_DataSet.EditValue.ToStringEx(), keyValue); ButtonStateChanged(_UpdateType); DoBindingSummaryEditor(_BLL.DataBinder); //绑定数据输入控件 ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页 DoPreviewCode(); DoShowConfigItem(); } private void frm_DocNoRule_Load(object sender, EventArgs e) { InitializeForm(); SetGridsPermission(); } protected override void InitializeForm() { _SummaryView = new DevGridView(gvSummary); _DetailGroupControl = pcDetailEditor; _BLL = new bllDocNoRule(); _BLLInstance = _BLL as bllDocNoRule; //当前账套 txt_DataSet.EditValue = Loginer.CurrentUser.DBID; DataBinderTools.BoundUser(repM_User); DataBinderTools.BoundUser(txtCreatedBy); DataBinderTools.BoundCheckEdit(repM_Check); DataBinderTools.BoundCheckEdit(txtFlagSpilitNo); DataBinderTools.BoundCheckEdit(txtFlagIncludeDocCode); DataBinderTools.BoundCheckEdit(repM_Check); DataBinderTools.BoundBusinessTables(repM_Doc, false); DataBinderTools.BoundBusinessTables(txtDocCode, false); DataBinderTools.BoundDBDataSet(txt_DataSet, tb_DataSet.DataSetID); LoadConfigItem(txxtItem1); LoadConfigItem(txxtItem2); LoadConfigItem(txxtItem3); LoadConfigItem(txxtItem4); base.InitializeForm(); } private void LoadConfigItem(ComboBoxEdit combo) { combo.Properties.Items.Clear(); combo.Properties.Items.AddRange(new[] { "<无>", "<年年年年>", "<年年>", "<月月>", "<日日>" }); } private void OnConfigItemChanged() { var text = txxtItem1.Text + txxtItem2.Text + txxtItem3.Text + txxtItem4.Text; SetEditorBindingValue(txtRuleFormat, text, true); DoPreviewCode(); } protected override void ShowSummary() { _BLLInstance.GetSummaryData(txt_DataSet.EditValue.ToStringEx(), true); //调用业务逻辑类的GetSummaryData()方法获取数据 DoBindingSummaryGrid(_BLL.SummaryTable); //绑定主表的Grid ShowSummaryPage(true); //显示Summary页面. } private void txt_DataSet_EditValueChanged(object sender, EventArgs e) { ShowSummary(); } private void txtDocCode_EditValueChanged(object sender, EventArgs e) { if (IsAddOrEditMode) { SetEditorBindingValue(sender as TextEdit, (sender as TextEdit).EditValue, false); DoPreviewCode(); } } private void txtFlagIncludeDocCode_CheckedChanged(object sender, EventArgs e) { if (IsAddOrEditMode) { SetEditorBindingValue(sender as CheckEdit, (sender as CheckEdit).EditValue, false); DoPreviewCode(); } } private void txtFlagSpilitNo_CheckedChanged(object sender, EventArgs e) { if (IsAddOrEditMode) { SetEditorBindingValue(sender as CheckEdit, (sender as CheckEdit).EditValue, false); DoPreviewCode(); } } private void txtNoLength_EditValueChanged(object sender, EventArgs e) { if (IsAddOrEditMode) { SetEditorBindingValue(sender as TextEdit, (sender as TextEdit).EditValue, false); DoPreviewCode(); } } private void txtNoLength_Validating(object sender, CancelEventArgs e) { if (txxtItem4.Text != "") //有-日日 { if (IsAddMode && ConvertEx.ToInt(txtNoLength.Text) < 3) { SetEditorBindingValue(txtNoLength, 3, true); e.Cancel = true; Msg.Warning("序号长度最少3位,最大5位!"); } } else { if (IsAddMode && ConvertEx.ToInt(txtNoLength.Text) < 5) { SetEditorBindingValue(txtNoLength, 5, true); e.Cancel = true; Msg.Warning("序号长度最少5位,最大9位!"); } } } private void txxtItem1_EditValueChanged(object sender, EventArgs e) { if (IsAddOrEditMode) OnConfigItemChanged(); } private void txxtItem2_EditValueChanged(object sender, EventArgs e) { if (IsAddOrEditMode) OnConfigItemChanged(); } private void txxtItem3_EditValueChanged(object sender, EventArgs e) { if (IsAddOrEditMode) OnConfigItemChanged(); } private void txxtItem4_EditValueChanged(object sender, EventArgs e) { if (IsAddOrEditMode) OnConfigItemChanged(); } //检查主表数据完整性 protected override bool ValidatingData() { if (ConvertEx.ToString(txtDocCode.EditValue).Trim() == string.Empty) { Msg.Warning("单据编号不能为空!"); txtDocCode.Focus(); return false; } if (ConvertEx.ToString(txtRuleFormat.EditValue).Trim() == string.Empty) { Msg.Warning("编码规则不能为空!"); txtRuleFormat.Focus(); return false; } if (txtResetZero.Text == "归零") if (txtRuleFormat.Text.IndexOf("年") < 0) { Msg.Warning("当前规则不支持序号归零!务必定义年份条件!"); return false; } string[] items = { txxtItem1.Text, txxtItem2.Text, txxtItem3.Text, txxtItem4.Text }; var qrYY = from n in items where n.Contains("年年") select n; var qrMM = from n in items where n.Contains("月月") select n; var qrDD = from n in items where n.Contains("日日") select n; if (qrYY.ToArray().Length > 1 || qrMM.ToArray().Length > 1 || qrDD.ToArray().Length > 1) { Msg.Warning("规则子项目重复定义!"); return false; } //月,日 if ((qrMM.ToArray().Length > 0 || qrDD.ToArray().Length > 0) && txtResetZero.Text != "归零") { Msg.Warning("配置项目包含<月><日>的,必须归零!"); txtResetZero.Focus(); return false; } if (IsAddMode) if (_BLLInstance.CheckNoExistsEx( txt_DataSet.EditValue.ToStringEx(), txtDocCode.EditValue.ToStringEx())) { var msg = "编码规则不能重复添加!"; Msg.Warning(msg); return false; } return true; } } }