#region using System; using System.ComponentModel; using System.Data; using CSFrameworkV5.Business; using CSFrameworkV5.Business.BLL_Permission; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Library; using CSFrameworkV5.Library.CommonClass; using CSFrameworkV5.Models; using DevExpress.XtraTreeList; #endregion namespace CSFrameworkV5.SystemModule { /// /// Organization的资料管理窗体,由代码生成器(Code Generator)自动生成 /// public partial class frmOrganization : frmBaseDataDictionary { private bllGroup _BLLInstance; public frmOrganization() { InitializeComponent(); } private void btnEmpty_Click(object sender, EventArgs e) { ClearContainerEditorText(pnlSearch); } private void btnQuery_Click(object sender, EventArgs e) { //搜索数据 try { frmWaitingEx.ShowMe(this); CCursor.ShowWaitCursor(); var dt = _BLLInstance.Search( ConvertEx.ToString(txt_GroupCode.EditValue), ConvertEx.ToString(txt_GroupName.EditValue), "", ConvertEx.ToString(txt_Owner1.EditValue), ConvertEx.ToString(txt_OwnerTel1.EditValue)); DoBindingSummaryGrid(dt); //绑定主表的Grid ShowSummaryPage(true); //显示Summary页面. } finally { frmWaitingEx.HideMe(this); } if (gvSummary.RowCount == 0) Msg.Warning("没有找到数据!"); } protected override void ButtonStateChanged(UpdateType currentState) //按钮状态改变时触发的事件 { base.ButtonStateChanged(currentState); if (currentState == UpdateType.Modify) { txtGroupCode.Enabled = false; //修改状态下不允许修改主键的数据 txtGroupCode.Properties.ReadOnly = true; //修改状态下不允许修改主键的数据 } txtLastUpdateDate.Properties.ReadOnly = true; //禁止修改 txtLastUpdatedBy.Properties.ReadOnly = true; //禁止修改 txtGroupCode.Enabled = currentState == UpdateType.Add; txtAttributeCodes.Enabled = IsAddOrEditMode; } public override void DoAdd(IButtonInfo sender) { base.DoAdd(sender); SetEditorBindingValue(txtParentGroupCode, "", true); } /// /// 绑定修改页面中所有输入框的数据源 /// /// 数据源 protected override void DoBindingSummaryEditor(DataTable summary) { DoBindingEditorPanel(pcDetailEditor, summary); //在此可绑定其它自定义的输入框,参考frmCustomer的DoBindingSummaryEditor方法 DataBinder.BindingControl(txtAttributeCodes, summary, tb_MyGroup.AttributeCodes, "EditValue"); DataBinder.BindingControl(txtParentGroupCode, summary, tb_MyGroup.ParentGroupCode, "EditValue"); } public override void DoDelete(IButtonInfo sender) { AssertFocusedRow(); //检查是否选择一条记录 //调用业务逻辑类删除记录 var summary = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle); var groupCode = summary[tb_MyGroup.GroupCode].ToStringEx(); //组编号 var groupName = summary[tb_MyGroup.GroupName].ToStringEx(); if (false == Msg.AskQuestion( "确定要删除 " + groupName + " 的资料,包括组织机构子级资料及所有权限资料?")) return; var b = _BLLInstance.DeleteGroupData(groupCode); AssertEqual(b, true, "删除记录时发生错误!"); //同步删除导航结点 var node = tlSummary.FindNodeByKeyID(groupCode); if (node != null) tlSummary.Nodes.Remove(node); DeleteSummaryRow(_SummaryView.FocusedRowHandle); //删除表格中的资料行 if (_SummaryView.FocusedRowHandle < 0) //删除了最後一条记录. 显示Summary页面. ShowSummaryPage(true); else DoViewContent(null); //最后处理自定义方法 DoAfterDelete(groupCode); if (IsViewMode) LoadTree(); Msg.ShowInformation("成功删除组 " + groupName + " 的资料及所有权限资料!"); } public override void DoRefreshData(IButtonInfo sender) { base.DoRefreshData(sender); DevTreeListView.SetImageIndex(tlSummary, null, 1, 0); } public override void DoSave(IButtonInfo sender) { var code = txtGroupCode.Text; var isAdd = UpdateType.Add == _UpdateType; base.DoSave(sender); //保存成功,定位 if (!IsAddOrEditMode) { if (isAdd) DataDictCache.RefreshCache(tb_MyGroup.__TableName); LoadTree(); var N = tlSummary.FindNodeByKeyID(code); if (N != null) tlSummary.FocusedNode = N; } } private void frmOrganization_Load(object sender, EventArgs e) { InitializeForm(); //自定义初始化操作 } protected override void InitializeForm() { _SummaryView = new DevGridView( gvSummary); //实例化数据主视图,此接口可支持不同的主视图,比如Grid,TreeList. _DetailGroupControl = pcDetailEditor; //修改页面所有输入框的容器 _BLL = new bllGroup(); //实例化基类业务逻辑层 _BLLInstance = _BLL as bllGroup; //本窗体的业务层对象引用 base.InitializeForm(); DataBinderTools.BoundUser(txtOwner1); DataBinderTools.BoundUser(txtOwner2); DataBinderTools.BoundUser(txt_Owner1); DataBinderTools.BoundUser(repM_Owner1); DataBinderTools.BoundUser(repM_Owner2); DataBinderTools.BoundUser(txtLastUpdatedBy); DataBinderTools.BoundCheckEdit(rep_IsVisible); var attrs = DataDictCache.Cache.CustomerAttributes; txtAttributeCodes.BindingDataSource(attrs, "AttributeCode", "NativeName"); DataBinderTools.BoundOrganization(txtParentGroupCode, imageList1); LoadTree(); } private void LoadDataByTree() { if (tlSummary.FocusedNode != null) { var groupCode = ConvertEx.ToString( tlSummary.FocusedNode.GetValue(tb_MyGroup.GroupCode)); btnEmpty_Click(btnEmpty, new EventArgs()); txt_GroupCode.EditValue = groupCode; btnQuery.PerformClick(); //执行查询 if (gvSummary.RowCount > 0) { var H = gvSummary.LocateByValue(tb_MyGroup.GroupCode, groupCode); if (H >= 0) gvSummary.FocusedRowHandle = H; } } } private void LoadTree() { var treeData = _BLLInstance.GetLookupData(); //必须取数据,缓存没同步 tlSummary.LookAndFeel.UseDefaultLookAndFeel = false; tlSummary.LookAndFeel.UseWindowsXPTheme = true; tlSummary.StateImageList = imageList1; tlSummary.KeyFieldName = tb_MyGroup.GroupCode; //设置主键 tlSummary.ParentFieldName = tb_MyGroup.ParentGroupCode; //设置父级主键 tlSummary.RootValue = ""; //顶级树结点的值 tlSummary.BeginUpdate(); tlSummary.DataSource = treeData; DevTreeListView.SetImageIndex(tlSummary, null, 1, 0); DevStyle.SetTreeListSelectStyle(tlSummary); tlSummary.EndUpdate(); tlSummary.ExpandAll(); } protected override void ShowSummary() { //重写此方法打开窗体时不显示任何数据 } private void tlSummary_FocusedNodeChanged(object sender, FocusedNodeChangedEventArgs e) { LoadDataByTree(); } private void txtParentGroupCode_QueryPopUp(object sender, CancelEventArgs e) { DataBinderTools.BoundOrganization(txtParentGroupCode, imageList1); } private void txtParentGroupCode_Validating(object sender, CancelEventArgs e) { if (!IsAddOrEditMode) return; //修改父级结点,不能改为它的子结点 var codeNew = ConvertEx.ToString(txtParentGroupCode.EditValue); var codeOld = ConvertEx.ToString( _BLLInstance.DataBinderRow[tb_MyGroup.ParentGroupCode]); var codeCur = ConvertEx.ToString(txtGroupCode.EditValue); if (codeNew == "" || codeOld == "" || codeNew == codeOld) return; //改的值相同,不处理 if (codeNew == codeCur) //父节点不能改为自己 { e.Cancel = true; SetEditorBindingValue(txtParentGroupCode, codeOld, true); //还原数据 Msg.Warning("父节点不能改为自己!"); return; } //新旧值都不为空,表示用户修改了父级结点 if (!string.IsNullOrEmpty(codeNew)) { var nodeCur = tlSummary.FindNodeByFieldValue(tb_MyGroup.GroupCode, codeCur); var nodeNew = tlSummary.FindNodeByFieldValue(tb_MyGroup.GroupCode, codeNew); //检查修改后的结点是当前结点的子结点 if (nodeNew.HasAsParent(nodeCur)) { SetEditorBindingValue(txtParentGroupCode, codeOld, true); //还原数据 e.Cancel = true; Msg.Warning("乱套了!不能修改为它的子结点!"); } } } //检查主表数据完整性 protected override bool ValidatingData() { if (ConvertEx.ToString(txtGroupCode.EditValue).Trim() == string.Empty) { Msg.Warning("组织编号不能为空!"); txtGroupCode.Focus(); return false; } if (ConvertEx.ToString(txtGroupName.EditValue).Trim() == string.Empty) { Msg.Warning("组织名称不能为空!"); txtGroupName.Focus(); return false; } if (ConvertEx.ToString(txtAttributeCodes.EditValue).Trim() == string.Empty) { Msg.Warning("类别不能为空!"); txtAttributeCodes.Focus(); return false; } if (ConvertEx.ToString(txtOwner1.EditValue).Trim() == string.Empty) { Msg.Warning("主管不能为空!"); txtOwner1.Focus(); return false; } return true; } } }