treelist学习总结 --拖拽事件
来源:互联网 发布:硬盘安装mac os x 编辑:程序博客网 时间:2024/05/21 06:44
1.2关于拖拽
树节点的拖拽事件,一般用三个,dragDrop,dragEnter,dragOver分别是有拖拽趋向时发生,拖拽了以后发生,拖拽动作结束发生。以下是我写的拖拽事件。
仅供参考,
//关于拖拽事件还有一个属性,optionsbehavior.dragnodes如果等于 false就是不允许拖拽了
#region drag 事件
private void treeDepartment_DragDrop(object sender, DragEventArgs e)
{
TreeListNode targetNode =GetNodeByLocation(this, new Point(e.X, e.Y));
bool succeed = DoDragDrop(e, targetNode);
if (succeed && !GetDraggedNode(e).TreeList.Equals(this))
{
this.Refresh();
}
}
private void treeDepartment_DragEnter(object sender, DragEventArgs e)
{
UiCommon.SetDragEffect(e, GetNodeByLocation(this, new Point(e.X, e.Y)));
}
private void treeDepartment_DragOver(object sender, DragEventArgs e)
{
UiCommon.SetDragEffect(e, GetNodeByLocation(this, new Point(e.X, e.Y)));
}
#endregion
/// <summary>
/// 根据鼠标位置获取节点
/// </summary>
/// <param name="treeList">节点所在的treelist</param>
/// <param name="location">节点位置</param>
/// <returns></returns>
private TreeListNode GetNodeByLocation(TreeList treeList, Point location)
{
TreeListHitInfo hitInfo = treeList.CalcHitInfo(treeList.PointToClient(location));
return hitInfo.Node;
}
/// <summary>
/// 拖拽事件
/// </summary>
/// <param name="e"></param>
/// <param name="targetNode"></param>
/// <returns></returns>
private bool DoDragDrop(DragEventArgs e, TreeListNode targetNode)
{
if (e.Effect != DragDropEffects.Move)
return false;
TreeListNode draggedNode = GetDraggedNode(e);
DataRow draggedRow = draggedNode.Tag as DataRow;
if (draggedRow == null)
return false;
DataRow targetRow = targetNode.Tag as DataRow;
if (targetRow == null)
return false;
string tableName = draggedRow.Table.TableName;
return DragDepartment(draggedRow, targetRow);
}
// <summary>
/// 移动部门位置
/// </summary>
/// <param name="draggedRow"></param>
/// <param name="targetRow"></param>
/// <returns></returns>
private static bool DragDepartment(DataRow draggedRow, DataRow targetRow)
{
string departmentName = "";
try
{
string targetTableName = targetRow.Table.TableName;
departmentName = draggedRow["DeptName"].ToString();
if (!targetTableName.Equals("DepartmentTable", StringComparison.CurrentCultureIgnoreCase))
return false;
DepartmentInfoAccessor.MoveDepartment(draggedRow["DeptID"].ToString(),
targetRow["DeptID"].ToString());
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 设置拖拽时的鼠标效果
/// </summary>
/// <param name="e"></param>
/// <param name="targetNode"></param>
internal static void SetDragEffect(DragEventArgs e, TreeListNode targetNode)
{
TreeListNode draggedNode = GetDraggedNode(e);
DataRow draggedRow = (DataRow)draggedNode.Tag;
//当被拖动的节点无法处理时显示禁止图标
if (draggedRow == null ||
(!draggedRow.Table.TableName.Equals("UserTable", StringComparison.CurrentCultureIgnoreCase) &&
!draggedRow.Table.TableName.Equals("DepartmentTable", StringComparison.CurrentCultureIgnoreCase)))
{
e.Effect = DragDropEffects.None;
return;
}
//当不存在目标节点或目标节点的层级大于等于被拖动节点时(后者仅针对树内拖拽),显示禁止图标
if (targetNode == null || draggedNode == targetNode || targetNode.HasAsParent(draggedNode))
{
e.Effect = DragDropEffects.None;
return;
}
e.Effect = DragDropEffects.Move;
}
- treelist学习总结 --拖拽事件
- DevExpress TreeList用法总结
- DevExpress学习笔记(五)-以拖拽的方式构建树(TreeList)
- 关于treelist节点展开事件
- TreeList的GetStateImage事件应用
- DevExpress控件-TreeList使用总结
- TreeList
- DevExpress使用经验分享:Treelist拖拽节点
- c#事件学习总结
- Android事件学习总结
- IOS事件学习总结
- jQuery事件学习总结
- 学习按键事件的总结
- 委托和事件学习总结
- 学习总结--委托和事件
- JQuery事件函数学习总结
- jquery 学习总结(三) 事件
- jQuery学习大总结(四)jQuery事件
- javascript 获得汉字拼音的第一个字母
- Android手机全攻略 ---part1
- C语言中的复数
- EInsurance项目小结
- Mapping
- treelist学习总结 --拖拽事件
- magento -- 推荐插件 -- Shop by manufacturer/brand/character/etc
- C++ typedef使用方法总结
- 好久没有来了
- Apache Ivy
- ComboBox读取数据库生成下拉列表的算法简化
- 漫谈数据库索引
- 嵌套母版页和半透明
- bakefile 初体验