1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
#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
{
    /// <summary>
    ///     Organization的资料管理窗体,由代码生成器(Code Generator)自动生成
    /// </summary>
    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);
        }
 
        /// <summary>
        ///     绑定修改页面中所有输入框的数据源
        /// </summary>
        /// <param name="summary">数据源</param>
        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;
        }
    }
}