using DevExpress.XtraEditors; using DevExpress.XtraGantt.Scheduling; using DevExpress.XtraGrid.Views.Grid; using System.ComponentModel; using Yw.WinFrmUI; namespace PBS.WinFrmUI { public partial class ElecPriceMgr : Yw.WinFrmUI.DocumentPage { public ElecPriceMgr() { InitializeComponent(); this.gridView1.SetNormalView(30); this.gridView1.CellMerge += GridView1_CellMerge; this.gridView1.OptionsView.AllowCellMerge = true; } private void BtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { AddElePrice(); } private BindingList _allBindingList = null;//所有绑定列表 private PBS.Vmo.ElecPriceVmo _elecPrice = null; public override void InitialDataSource() { SetBindingData(); } /// /// 绑定数据 /// public async void SetBindingData() { _allBindingList = new BindingList(); var bll = new BLL.ElecPrice(); var allList = await bll.GetAll(); if (allList != null) _elecPrice = allList.First(); if (_elecPrice != null) { if (_elecPrice.Settings != null && _elecPrice.Settings.MonthList != null) { var months = _elecPrice.Settings.MonthList.OrderBy(x => x.StartMonth); foreach (var month in months) { if (month.HourList == null) continue; var belongName = $"{month.StartMonth}~{month.EndMonth}(月)"; var hours = month.HourList.OrderBy(x => x.StartHour); foreach (var hour in hours) { var vm = new ElecPriceViewModel(belongName, hour); vm.StartMonth = month.StartMonth; vm.EndMonth = month.EndMonth; _allBindingList.Add(vm); } } } } else { _elecPrice = new Vmo.ElecPriceVmo(); _elecPrice.Settings = new Vmo.ElecPriceSetting(); _elecPrice.Settings.MonthList = new List(); } this.elecPriceViewModelBindingSource.DataSource = _allBindingList; this.elecPriceViewModelBindingSource.ResetBindings(false); //this.gridView1.BestFitColumns(); } //添加电费 public void AddElePrice() { var dlg = new AddElectricDlg(); dlg.SetBindingData(); dlg.ReloadDataEvent += async (price) => { var bll = new BLL.ElecPrice(); _elecPrice.Settings.MonthList.Add(price); if (_elecPrice.ID == 0) { var id = await bll.Insert(_elecPrice); if (id > 0) { _elecPrice.ID = id; foreach (var item in price.HourList) { this._allBindingList.Add(new ElecPriceViewModel { BelongName = $"{price.StartMonth}~{price.EndMonth}(月)", StartHour = item.StartHour, EndHour = item.EndHour, Price = item.Price }); } this.elecPriceViewModelBindingSource.ResetBindings(false); return true; } return false; } var bol = await bll.Update(_elecPrice); if (bol) { foreach (var item in price.HourList) { this._allBindingList.Add(new ElecPriceViewModel { BelongName = $"{price.StartMonth}~{price.EndMonth}(月)", StartHour = item.StartHour, EndHour = item.EndHour, Price = item.Price }); } this.elecPriceViewModelBindingSource.ResetBindings(false); return true; } return false; }; dlg.ShowDialog(); } //编辑电费 public void EditElePrice() { var row = gridView1.GetCurrentViewModel(_allBindingList); if (row == null) return; var editTime = _elecPrice.Settings; var FindMonth = editTime.MonthList.Find(x => x.StartMonth == row.StartMonth && x.EndMonth == row.EndMonth); var dlg = new EditElectricDlg(); dlg.SetBindingData(FindMonth.HourList); dlg.ReLoadDataevent += async (price) => { FindMonth.HourList.Clear(); FindMonth.HourList = price; var bll = new BLL.ElecPrice(); var isok = await bll.Update(_elecPrice); if (isok) { this.SetBindingData(); return true; } return false; }; dlg.ShowDialog(); } /// /// 删除电费 /// public async void DeletePrice() { var row = this.gridView1.GetCurrentViewModel(_allBindingList); if (row == null) return; if (XtraMessageBox.Show("确定要删除所选中?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK) return; _elecPrice.Settings.MonthList.RemoveAll(x => x.StartMonth == row.StartMonth && x.EndMonth == row.EndMonth); var isok = await new BLL.ElecPrice().Update(_elecPrice); if (isok) { this.elecPriceViewModelBindingSource.ResetBindings(false); } this.SetBindingData(); this.elecPriceViewModelBindingSource.ResetBindings(false); MessageBox.Show("删除成功", "提示"); } //控制只允许分组合并 private void GridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e) { if (e.Column.FieldName == "BelongName") { // 获取当前单元格和下一个单元格的值 var value1 = gridView1.GetRowCellValue(e.RowHandle1, e.Column); var value2 = gridView1.GetRowCellValue(e.RowHandle2, e.Column); // 如果两个单元格的值相等,则允许合并 e.Merge = value1 != null && value1.Equals(value2); e.Handled = true; } else { // 其他列不允许合并 e.Merge = false; e.Handled = true; } } private void BtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { EditElePrice(); } private void BtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { DeletePrice(); } } }