using DevExpress.XtraEditors;
|
using DevExpress.XtraTreeList;
|
using DevExpress.XtraTreeList.Handler;
|
using DevExpress.XtraTreeList.Nodes;
|
using System.Reflection;
|
|
namespace HStation.WinFrmUI.Basic
|
{
|
internal class Class1
|
{
|
#region Org
|
|
private async void SaveOrg()
|
{
|
var list = new List<Model.SiteOrgSaveTree>();
|
if (this.treeList1.Nodes != null && this.treeList1.Nodes.Any())
|
{
|
foreach (TreeListNode node in treeList1.Nodes.Cast<TreeListNode>())
|
{
|
var model = GetTreeModel(node);
|
list.Add(model);
|
}
|
}
|
var result = await _bll.Save(_corpration.ID, _sitePolicy.ID, list);
|
if (!result)
|
{
|
XtraMessageBox.Show("保存失败!");
|
return;
|
}
|
XtraMessageBox.Show("保存成功!");
|
}
|
|
private Model.SiteOrgSaveTree GetTreeModel(TreeListNode node)
|
{
|
if (node == null)
|
return default;
|
|
var vm = GetViewModel(node);
|
var model = new Model.SiteOrgSaveTree();
|
if (!vm.IsNew)
|
model.ID = vm.ID;
|
model.TargetID = vm.TargetID;
|
model.TargetType = vm.TargetType;
|
|
if (node.Nodes != null && node.Nodes.Any())
|
{
|
model.Children = new List<Model.SiteOrgSaveTree>();
|
foreach (TreeListNode childNode in node.Nodes.Cast<TreeListNode>())
|
{
|
var childModel = GetTreeModel(childNode);
|
model.Children.Add(childModel);
|
}
|
}
|
return model;
|
}
|
|
private void DeleteOrg()
|
{
|
var node = this.treeList1.FocusedNode;
|
if (node == null)
|
{
|
XtraMessageBox.Show("请选择数据!");
|
return;
|
}
|
if (XtraMessageBox.Show($"确认删除数据行(包含子节点)?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK)
|
return;
|
this.treeList1.Nodes.Remove(node);
|
}
|
|
#endregion Org
|
|
#region Drag
|
|
private TreeListNode currentDragNode = null;
|
|
private void TreeList1_DragOver(object sender, DragEventArgs e)
|
{
|
if (_sitePolicy == null)
|
return;
|
|
currentDragNode = (TreeListNode)e.Data.GetData(typeof(TreeListNode));
|
if (currentDragNode != null)
|
{
|
var targetNode = this.treeList1.GetNodeAt(treeList1.PointToClient(new Point(e.X, e.Y)));
|
if (currentDragNode == targetNode)
|
{
|
e.Effect = DragDropEffects.None;
|
return;
|
}
|
e.Effect = DragDropEffects.Move;
|
}
|
else
|
{
|
e.Effect = e.Data.GetDataPresent(typeof(DragSiteOrg)) ? DragDropEffects.Move : DragDropEffects.None;
|
}
|
}
|
|
private void TreeList1_DragDrop(object sender, DragEventArgs e)
|
{
|
var dragInsertPosition = AjustDirection(sender, e);
|
if (currentDragNode != null)
|
{
|
SetCurrentDragNode(e, dragInsertPosition);
|
currentDragNode = null;
|
}
|
else
|
{
|
AddOtherDragNode(e, dragInsertPosition);
|
}
|
}
|
|
private void SetCurrentDragNode(DragEventArgs e, DragInsertPosition dragInsertPosition)
|
{
|
var dragNode = (TreeListNode)e.Data.GetData(typeof(TreeListNode));
|
if (dragNode == null)
|
return;
|
var dragVm = GetViewModel(dragNode);
|
if (dragVm == null)
|
return;
|
|
long parentId = 0;
|
if (dragInsertPosition != DragInsertPosition.None)
|
{
|
var targetNode = GetTargetNode(e);
|
var targetVm = GetViewModel(targetNode);
|
if (targetVm != null)
|
{
|
if (dragInsertPosition == DragInsertPosition.AsChild)
|
{
|
if (targetVm.TargetType == IStation.ObjectType.SiteInfo)
|
{
|
XtraMessageBox.Show("请拖动至站点组下!");
|
return;
|
}
|
parentId = targetVm.ID;
|
}
|
else
|
{
|
parentId = targetVm.ParentID;
|
}
|
}
|
}
|
|
var vmIndex = _allBindingList.FindIndex(x => x.ID == dragVm.ID);
|
if (vmIndex != -1)
|
{
|
var vm = _allBindingList[vmIndex];
|
vm.ParentID = parentId;
|
}
|
}
|
|
private void AddOtherDragNode(DragEventArgs e, DragInsertPosition dragInsertPosition)
|
{
|
var dragSiteOrg = (DragSiteOrg)e.Data.GetData(typeof(DragSiteOrg));
|
if (_allBindingList.Any())
|
{
|
foreach (var item in _allBindingList)
|
{
|
if (item.TargetType == dragSiteOrg.TargetType && item.TargetID == dragSiteOrg.TargetID)
|
{
|
XtraMessageBox.Show("对象已存在");
|
return;
|
}
|
}
|
}
|
|
long parentId = 0;
|
if (dragInsertPosition != DragInsertPosition.None)
|
{
|
var targetNode = GetTargetNode(e);
|
var targetVm = GetViewModel(targetNode);
|
if (targetVm != null)
|
{
|
if (dragInsertPosition == DragInsertPosition.AsChild)
|
{
|
if (targetVm.TargetType == IStation.ObjectType.SiteInfo)
|
{
|
XtraMessageBox.Show("请拖动至站点组下!");
|
return;
|
}
|
parentId = targetVm.ID;
|
}
|
else
|
{
|
parentId = targetVm.ParentID;
|
}
|
}
|
}
|
|
var vm = new CurrentViewModel(dragSiteOrg)
|
{
|
PolicyID = _sitePolicy.ID,
|
ParentID = parentId
|
};
|
_allBindingList.Add(vm);
|
|
this.treeList1.RefreshDataSource();
|
this.treeList1.ForceInitialize();
|
}
|
|
private TreeListNode GetTargetNode(DragEventArgs e)
|
{
|
var point = new Point(e.X, e.Y);
|
var clientPoint = this.treeList1.PointToClient(point);
|
var targetNode = this.treeList1.GetNodeAt(clientPoint);
|
return targetNode;
|
}
|
|
private CurrentViewModel GetViewModel(TreeListNode node)
|
{
|
if (node == null)
|
return default;
|
var vm = this.treeList1.GetDataRecordByNode(node) as CurrentViewModel;
|
return vm;
|
}
|
|
/// <summary>
|
/// 获取拖动过程中的方向
|
/// </summary>
|
private DragInsertPosition AjustDirection(object sender, DragEventArgs e)
|
{
|
PropertyInfo pi = typeof(TreeList).GetProperty("Handler", BindingFlags.Instance | BindingFlags.NonPublic);
|
TreeListHandler handler = (TreeListHandler)pi.GetValue(this.treeList1, null);
|
return handler.StateData.DragInfo.DragInsertPosition;
|
}
|
|
#endregion Drag
|
}
|
}
|