啊鑫
2024-07-09 0552fcc8cb73fc3021e2915129f55a42ed3f20e5
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
#region
 
using System.Data;
using System.Drawing;
using CSFrameworkV5.Business;
using CSFrameworkV5.Common;
using CSFrameworkV5.Core;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
 
#endregion
 
namespace CSFrameworkV5.Library
{
    /// <summary>
    ///     表格编辑基类窗体
    /// </summary>
    public partial class frmBaseGridEditForm : frmBaseChild, IPrintableForm
    {
        /// <summary>
        ///     数据字典业务逻辑
        /// </summary>
        protected bllBaseDataDict
            _BLL = new bllNullObjectDataDict(); //临时实例        
 
        protected ISummaryView _SummaryView;
 
        public frmBaseGridEditForm()
        {
            InitializeComponent();
        }
 
        public virtual void DoCancel(IButtonInfo sender)
        {
            if (Msg.AskQuestion("确定要取消修改吗?"))
            {
                var dt = _SummaryView.DataSource as DataTable;
                dt.RejectChanges();
                _SummaryView.RefreshDataSource();
            }
        }
 
        /// <summary>
        ///     保存数据
        /// </summary>
        /// <param name="sender"></param>
        public virtual void DoSave(IButtonInfo sender)
        {
            _FocusEditor.Focus(); //跳动焦点,使当前单元格的值写入数据源
 
            if (_SummaryView.RowCount == 0)
            {
                Msg.Warning("没有数据!");
            }
            else
            {
                if (!ValidatingData()) return;
 
                try
                {
                    frmWaitingEx.ShowMe(this);
                    var dt = _SummaryView.DataSource as DataTable;
                    var changes = dt.GetChanges();
                    if (changes != null)
                    {
                        if (changes.Rows.Count > 0) _BLL.Update(changes);
 
                        dt.AcceptChanges();
                        _SummaryView.RefreshDataSource();
                        Msg.ShowInformation("保存成功!");
                    }
                    else
                    {
                        Msg.Warning("您没有修改数据!");
                    }
                }
                finally
                {
                    frmWaitingEx.HideMe(this);
                }
            }
        }
 
        /// <summary>
        ///     初始化数据窗体的按钮
        /// </summary>
        public override void InitButtons()
        {
            base.InitButtons();
            Buttons.AddRange(GetPrintableButtons());
 
            var b = new IButtonInfo[2];
            b[0] = ToolbarRegister.CreateButton(ButtonNameList.btnSave, "保存",
                ToolBarGroup.数据操作,
                Globals.LoadBitmap("32_Save.png"), new Size(57, 28), true, true,
                DoSave);
            b[1] = ToolbarRegister.CreateButton(ButtonNameList.btnCancel,
                "取消修改", ToolBarGroup.数据操作,
                Globals.LoadBitmap("32_Cancel.png"), new Size(57, 28), true,
                true, DoCancel);
            Buttons.AddRange(b);
        }
 
        /// <summary>
        ///     检查输入完整性
        /// </summary>
        /// <returns></returns>
        protected virtual bool ValidatingData()
        {
            return true;
        }
 
        #region IPrintableForm 成员
 
        /// <summary>
        ///     打印操作按钮
        /// </summary>
        /// <returns></returns>
        public IButtonInfo[] GetPrintableButtons()
        {
            var b = new IButtonInfo[1];
            if (ButtonAuthorized(ButtonAuthority.PRINT))
                b[0] = ToolbarRegister.CreateButton(ButtonNameList.btnPrint,
                    "预览", ToolBarGroup.打印功能,
                    Globals.LoadBitmap("32_Print.png"), new Size(57, 28), true,
                    true, DoPrint);
 
            return b;
        }
 
        /// <summary>
        ///     打印报表
        /// </summary>
        /// <param name="button"></param>
        public virtual void DoPrint(IButtonInfo button)
        {
        }
 
        #endregion
 
        #region 控制表格主键列不能修改,新增的记录可以修改
 
        /// <summary>
        ///     控制表格主键列不能修改,新增的记录可以修改
        /// </summary>
        /// <param name="view"></param>
        protected virtual void HandlePKColumn(GridView view)
        {
            view.FocusedColumnChanged += OnView_FocusedColumnChanged;
            view.FocusedRowChanged += OnView_FocusedRowChanged;
            view.RowCellStyle += OnView_RowCellStyle;
        }
 
        private void OnView_FocusedColumnChanged(object sender,
            FocusedColumnChangedEventArgs e)
        {
            var view = sender as GridView;
            view.OptionsBehavior.Editable = true;
            if (e.FocusedColumn == view.Columns[_BLL.KeyFieldName])
            {
                var R = view.GetFocusedDataRow();
                if (R != null)
                    //不支持在表格内修改已保存记录主键的值,新增的记录可以修改
                    view.OptionsBehavior.Editable =
                        R.RowState == DataRowState.Detached ||
                        R.RowState == DataRowState.Added;
            }
        }
 
        private void OnView_FocusedRowChanged(object sender,
            FocusedRowChangedEventArgs e)
        {
            var view = sender as GridView;
            view.OptionsBehavior.Editable = true;
            if (view.FocusedColumn == view.Columns[_BLL.KeyFieldName])
            {
                var R = view.GetFocusedDataRow();
                if (R != null)
                    //不支持在表格内修改已保存记录主键的值,新增的记录可以修改
                    view.OptionsBehavior.Editable =
                        R.RowState == DataRowState.Detached ||
                        R.RowState == DataRowState.Added;
            }
        }
 
        private void OnView_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            //设置背景色
            if (e.Column == (sender as GridView).Columns[_BLL.KeyFieldName])
            {
                var R = (sender as GridView).GetFocusedDataRow();
                if (R.RowState == DataRowState.Detached ||
                    R.RowState == DataRowState.Added)
                    e.Appearance.BackColor = Color.Gainsboro;
                else
                    e.Appearance.BackColor = Color.Gainsboro;
            }
        }
 
        #endregion
    }
}