using DevExpress.Utils; using DevExpress.Utils.DragDrop; using DevExpress.XtraEditors; using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Nodes; using HStation.Vmo; using Yw; namespace HStation.WinFrmUI { public partial class AssetsCompressorSeriesMgrTreeCtrl : DevExpress.XtraEditors.XtraUserControl { /// /// /// public AssetsCompressorSeriesMgrTreeCtrl() { InitializeComponent(); this.treeList1.InitialDefaultSettings(); this.layoutControl1.SetupLayoutControl(); this.barBtnAdd.ItemClick += BarBtnAdd_ItemClick; this.barBtnEdit.ItemClick += BarBtnEdit_ItemClick; this.barBtnDelete.ItemClick += BarBtnDelete_ItemClick; this.barBtnInfo.ItemClick += BarBtnInfo_ItemClick; } /// /// 聚焦改变事件 /// public event Action FocusedChangedEvent; /// /// 所有绑定列表 /// private List _allBindingList = null; /// /// 初始化数据 /// public async void InitialData() { var overlay = this.ShowOverlay(); var allList = await BLLFactory.Instance.GetAll(); _allBindingList = new List(); allList?.ForEach(x => { var vm = new AssetsCompressorSeriesMgrViewModel(x); _allBindingList.Add(vm); }); this.treeList1.DataSource = _allBindingList; this.treeList1.ForceInitialize(); this.treeList1.ExpandAll(); overlay.Close(); SetDragEnable(this.barCkDrag.Checked); } //全部展开 private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.ExpandAll(); } //全部折叠 private void barBtnCollpseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.CollapseAll(); } //检索(menu) private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.layoutControlItem1.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always) this.layoutControlItem1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; else this.layoutControlItem1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; } //树线 private void barCkTreeLine_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.OptionsView.ShowTreeLines = this.barCkTreeLine.Checked ? DefaultBoolean.True : DefaultBoolean.False; } //聚焦节点改变 private void treeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e) { var vm = this.treeList1.GetDataRecordByNode(e.Node) as AssetsCompressorSeriesMgrViewModel; if (vm != null) { this.FocusedChangedEvent?.Invoke(vm.Vmo); } } //刷新 private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { InitialData(); } //右键菜单 private void treeList1_MouseClick(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Right) { return; } _calcHitInfo = this.treeList1.CalcHitInfo(e.Location); this.popupMenu1.ShowPopup(MousePosition); } private TreeListHitInfo _calcHitInfo = null; //右键菜单弹出前验证 private void popupMenu1_BeforePopup(object sender, CancelEventArgs e) { if (_calcHitInfo == null) { return; } if (_calcHitInfo.InRow) { this.barBtnAdd.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; this.barBtnEdit.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; this.barBtnDelete.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; this.barBtnInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; } else { this.barBtnAdd.Visibility = DevExpress.XtraBars.BarItemVisibility.Always; this.barBtnEdit.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; this.barBtnDelete.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; this.barBtnInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } } //获取当前 private AssetsCompressorSeriesMgrViewModel GetCurrentViewModel() { if (_allBindingList == null) { TipFormHelper.ShowError("数据初始化错误!"); return null; } if (_allBindingList.Count < 1) { TipFormHelper.ShowInfo("无数据!"); return null; } var vm = this.treeList1.GetCurrentViewModel(_allBindingList); if (vm == null) { TipFormHelper.ShowWarn("请选择数据行!"); return null; } return vm; } //添加 private void Add() { if (_allBindingList == null) { TipFormHelper.ShowError("数据初始化失败!"); return; } if (_calcHitInfo == null) { return; } long parentId = 0; if (_calcHitInfo.InRow) { var vm = this.treeList1.GetCurrentViewModel(_allBindingList); if (vm != null) { parentId = vm.ID; } } var dlg = new AddAssetsCompressorSeriesDlg(); dlg.ReloadDataEvent += (rhs) => { var vm = new AssetsCompressorSeriesMgrViewModel(rhs); _allBindingList.Add(vm); this.treeList1.RefreshDataSource(); TipFormHelper.ShowSucceed("添加成功!"); }; dlg.SetBindingData(parentId); dlg.ShowDialog(); } //编辑 private void Edit() { var vm = GetCurrentViewModel(); if (vm == null) { return; } var dlg = new EditAssetsCompressorSeriesDlg(); dlg.ReloadDataEvent += (rhs) => { vm.Reset(rhs); this.treeList1.RefreshNode(this.treeList1.FocusedNode); TipFormHelper.ShowSucceed("更新成功"); }; dlg.SetBindingData(vm.Vmo); dlg.ShowDialog(); } //删除 private async void Delete() { var vm = GetCurrentViewModel(); if (vm == null) { return; } var result = XtraMessageBox.Show("请问确认删除当前数据吗?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes; if (!result) { return; } var bol = await BLLFactory.Instance.DeleteByID(vm.ID); if (!bol) { TipFormHelper.ShowError("删除失败!"); return; } _allBindingList.Remove(vm); this.treeList1.RefreshDataSource(); TipFormHelper.ShowSucceed("删除成功!"); } //查看 private void View() { var vm = GetCurrentViewModel(); if (vm == null) { return; } var dlg = new ViewAssetsCompressorSeriesDlg(); dlg.SetBindingData(vm.Vmo); dlg.ShowDialog(); } //添加 private void BarBtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Add(); } //编辑 private void BarBtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Edit(); } //详细信息 private void BarBtnInfo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { View(); } //删除 private void BarBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Delete(); } #region 拖拽 private async void dragDropEvents1_DragDrop(object sender, DevExpress.Utils.DragDrop.DragDropEventArgs e) { var nodes = e.Data as List; if (nodes == null || nodes.Count < 1) { e.Handled = true; return; } var sourceNode = nodes[0]; var sourceNodeObj = this.treeList1.GetDataRecordByNode(sourceNode) as AssetsCompressorSeriesMgrViewModel; if (sourceNodeObj == null) { e.Handled = true; return; } var destNode = this.treeList1.GetNodeByCP(e.Location); if (destNode == null) { e.Handled = true; return; } var destNodeObj = this.treeList1.GetDataRecordByNode(destNode) as AssetsCompressorSeriesMgrViewModel; if (destNode == null) { e.Handled = true; return; } long id = sourceNodeObj.ID; long parentId = 0; int sortCode = 0; var sorters = new List(); if (e.InsertType == InsertType.Before) { parentId = destNodeObj.ParentID; sortCode = destNodeObj.SortCode; _allBindingList.ForEach(x => { if (x.ParentID == destNodeObj.ParentID) { if (x.SortCode >= destNodeObj.SortCode) { if (x != sourceNodeObj) { sorters.Add(new Yw.Vmo.Sorter() { ID = x.ID, SortCode = x.SortCode + 1 }); } } } }); } else if (e.InsertType == InsertType.After) { parentId = destNodeObj.ParentID; sortCode = destNodeObj.SortCode + 1; _allBindingList.ForEach(x => { if (x.ParentID == destNodeObj.ParentID) { if (x.SortCode > destNodeObj.SortCode) { if (x != sourceNodeObj) { sorters.Add(new Yw.Vmo.Sorter() { ID = x.ID, SortCode = x.SortCode + 1 }); } } } }); } else if (e.InsertType == InsertType.AsChild) { parentId = destNodeObj.ID; var allChildList = _allBindingList.Where(x => x.ParentID == destNodeObj.ParentID).ToList(); sortCode = allChildList.Count < 1 ? 1 : allChildList.Max(x => x.SortCode) + 1; } else { e.Handled = true; return; } var bll = BLLFactory.Instance; var bol = await bll.UpdateTreeSortCode(id, parentId, sortCode); if (!bol) { e.Handled = true; return; } if (sorters != null && sorters.Count > 0) { bol = await bll.UpdateSorter(sorters); if (!bol) { e.Handled = true; return; } } _allBindingList.ForEach(x => { if (x.ID == id) { x.ParentID = parentId; x.SortCode = sortCode; } if (sorters.Count > 0) { var sorter = sorters.Find(t => t.ID == x.ID); if (sorter != null) { x.SortCode = sorter.SortCode; } } }); } //拖拽排序 private void barCkDrag_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.SetDragEnable(this.barCkDrag.Checked); } //设置拖动可用性 private void SetDragEnable(bool allowDrag) { var be = this.behaviorManager1.GetBehavior(this.treeList1); be.Properties.AllowDrag = allowDrag; } #endregion 拖拽 } }