CRM之菜单管理(三)

五、功能实现

  1、  数据的保存与更新

  当新建一个菜单时,其在树中的节点Node(Name=“new_”+GUID);当修改一个菜单时,其在树中的节点Node(Name=”edit_”+GUID)。

在保存时,通过遍历菜单树中的节点Node.Name,根据该字符串的开头调用不同的保存方法。

 1         /// <summary> 创建一个TreeNode,定义Tag,Name,Text
 2         /// </summary>
 3         /// <returns></returns>
 4         public static TreeNode CreateTreeNode()
 5         {
 6             TreeNode node = new TreeNode();
 7             node.Name = "new_" + Guid.NewGuid().ToString();
 8             node.Tag = 0;
 9             node.Text = "请输入菜单名称";
10             return node;
11         }    

创建一个TreeNode,定义Tag,Name,Text

  (2)编辑菜单(略)

  2、  快速定位菜单

  通过点击TreeView中的某个节点,DataGridView中与之对应的菜单Row高亮。同理,通过选中DataGridView某条菜单Row,TreeView中与之对应的菜单Node高亮。

  (1)双击TreeView中的Node

 1         /// <summary> 双击TreeView中的某个Node,该node允许编辑,同时dataGridView中该node的记录高亮
 2         /// </summary>
 3         /// <param name="sender"></param>
 4         /// <param name="e"></param>
 5         private void treeViewMenu_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
 6         {
 7             //获取该节点的ID_
 8
 9             int id = Convert.ToInt32(treeViewMenu.SelectedNode.Tag);
10             int index = BLMenu.GetIndexByID(id);
11             dataGridViewMenu.CurrentCell = dataGridViewMenu.Rows[index].Cells[0];
12             dataGridViewMenu.Rows[index].Selected = true;
13             treeViewMenu.LabelEdit = true;
14         }    

双击TreeView中的某个Node,该node允许编辑,同时dataGridView中该node的记录高亮

  (2)选中DataGridView中的某行

 1         /// <summary> 选择dataGridView中的某行,使其对应的Node节点高亮
 2         /// </summary>
 3         /// <param name="sender"></param>
 4         /// <param name="e"></param>
 5         private void dataGridViewMenu_RowEnter(object sender, DataGridViewCellEventArgs e)
 6         {
 7             treeViewMenu.Focus();
 8             treeViewMenu.ExpandAll();
 9             int rowid = e.RowIndex;
10             int id = Convert.ToInt32(dataGridViewMenu.Rows[rowid].Cells[9].Value);
11             TreeNode node = searchNodeById(id, treeViewMenu.Nodes);
12             treeViewMenu.SelectedNode = node;
13         }

选择dataGridView中的某行,使其对应的Node节点高亮

  3、  拖动定位菜单

  拖动TreeView中的某个节点,达到快速修改其隶属关系的目的。

 1         /// <summary> 在用鼠标将某项拖动到该控件的工作区时发生
 2         /// </summary>
 3         /// <param name="sender"></param>
 4         /// <param name="e"></param>
 5         private void treeViewMenu_DragEnter(object sender, DragEventArgs e)
 6         {
 7             if (e.Data.GetDataPresent(typeof(TreeNode)))
 8                 e.Effect = DragDropEffects.Move;
 9             else
10                 e.Effect = DragDropEffects.None;
11         }
12
13         /// <summary> 在用户开始拖动项时发生
14         /// </summary>
15         /// <param name="sender"></param>
16         /// <param name="e"></param>
17         private void treeViewMenu_ItemDrag(object sender, ItemDragEventArgs e)
18         {
19             if (e.Button == MouseButtons.Left)
20             {
21                 DoDragDrop(e.Item, DragDropEffects.Move);
22             }
23         }
24
25         /// <summary> 在用户拖动完成时发生
26         /// </summary>
27         /// <param name="sender"></param>
28         /// <param name="e"></param>
29         private void treeViewMenu_DragDrop(object sender, DragEventArgs e)
30         {
31             try
32             {
33                 TreeNode currentNode = null, targetNode;
34                 if (e.Data.GetDataPresent(typeof(TreeNode)))
35                     currentNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
36                 if (currentNode == null)
37                     return;
38                 // 找到目标节点
39                 Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
40                 targetNode = this.treeViewMenu.GetNodeAt(pt);
41
42                 #region 移动节点
43                 if (targetNode != null
44                     && targetNode.Parent != currentNode
45                     && targetNode != currentNode)
46                 {
47                     TreeNode tempNode = currentNode;
48                     if (pt.X < 30 && targetNode.Parent == currentNode.Parent)
49                     {
50                         #region 同级移动顺序
51                         if (targetNode.Parent != null)
52                         {
53                             currentNode.Remove();
54                             targetNode.Parent.Nodes.Insert(targetNode.Index, tempNode);
55                         }
56                         #endregion
57                     }
58                     else
59                     {
60                         #region 同级或跨节点移动
61                         //if (currentNode.Parent != null && currentNode.Parent.Nodes.Count == 1)
62                         //{
63                         //    currentNode.Parent.ImageIndex = 2;
64                         //    currentNode.Parent.SelectedImageIndex = currentNode.Parent.ImageIndex;
65                         //}
66                         currentNode.Remove();
67                         targetNode.Nodes.Add(tempNode);
68                         //targetNode.ImageIndex = 0;
69                         //targetNode.SelectedImageIndex = targetNode.ImageIndex;
70                         #endregion
71                     }
72                 }
73                 #endregion
74
75                 #region 拖至根节点
76                 if (targetNode == null)
77                 {
78                     TreeNode tempNode = currentNode;
79                     //if (currentNode.Parent != null
80                     //    && currentNode.Parent.Nodes.Count == 1)
81                     //{
82                     //    currentNode.Parent.ImageIndex = 2;
83                     //    currentNode.Parent.SelectedImageIndex = currentNode.Parent.ImageIndex;
84                     //}
85                     currentNode.Remove();
86                     treeViewMenu.Nodes.Add(tempNode);
87                 }
88                 #endregion
89             }
90             catch (Exception ex)
91             {
92                 MessageBox.Show("Error:" + ex.ToString(), "错误提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
93             }
94         }

TreeView实现Node拖动的三个函数

原文地址:https://www.cnblogs.com/AngryZe/p/8185827.html

时间: 2024-10-06 22:30:05

CRM之菜单管理(三)的相关文章

CRM之菜单管理(二)

四.文件及函数 1.文件说明 (1)LQMenu.dbml:创建Linq To SQL类,使其对应数据库中的core_menu表 (2)MyFuncLib.cs:常见的公共函数类,将系统中经常用到的公共的函数放入其中 (3)BLMenu.cs:对LQMenu.dbml的数据操作层,用于存放数据增删改查函数,及其他与数据库有关的函数 (4)FormMenu.cs:窗体的主函数 2.FormMenu_Load函数 使用InitDgv函数来初始化DataGridView,当需要修改的时候可以直接在代码

企业选择CRM客户关系管理软件的要点

随着互联网的不断发展,企业办公也向着互通互联的方向在进步,而更方便更快捷的办公方式也是企业选择办公软件的首选要素,因此,CRM客户关系管理软件也已成为企业用户在客户管理的利器,不过由于软件种类众多,工作方式出入也较大,那么,如何选择CRM客户关系管理软件也成了企业CIO最头疼的问题. 选择自主研发还是选择通用产品 两者可以说是各有利弊的.其间自立研制CRM客户关系管理软件的优势是能依据公司本身的情况为自己创造一款高度契合公司操作习气和具有活络事务流程的CRM体系.毕竟,跟着公司事务的拓宽,对CR

C#开发微信门户及应用(20)-微信企业号的菜单管理

C#开发微信门户及应用(20)-微信企业号的菜单管理 前面几篇陆续介绍了很多微信企业号的相关操作,企业号和公众号一样都可以自定义菜单,因此他们也可以通过API进行菜单的创建.获取列表.删除的操作,因此本篇继续探讨这个主体,介绍企业号的菜单管理操作. 菜单在很多情况下,能够给我们提供一个快速入口,也可以用来获取用户信息的主要入口,通过OAuth2验证接口,以及自定义的重定向菜单,我们就可以获取对应的用户ID,然后进一步获取到用户的相关数据,可以显示给客户. 1.菜单的总体介绍 菜单的事件处理如下所

企业如何运用CRM进行客户管理?

俗话说创业容易守业难,企业刚刚创立的时候,往往大家都是激情澎湃的,但是在管理企业的过程中就开始出现一些问题,除了企业内部的制度没有建立完善,另外一个重要的方面就是客户管理工作没有做好.亿客CRM建议每个企业管理者即使认为目前客户数量少,不需要使用CRM系统,也应该了解一下CRM是什么意思,CRM给企业带来的好处以及CRM的作用及用法,为企业日后的发展做好充足的准备. CRM系统最基础的功能就是管理客户.当然这不仅仅是保存客户信息,这些用Excel就能替代的功能只是CRM最底层的基础,我们都知道销

如何做好CRM企业内部管理?

企业购买了CRM之后,难免会在实施过程中出现一些问题,包括员工对CRM系统的操作问题.CRM实施流程.CRM使用前的培训.CRM系统中各个员工的职位权限等等.这些问题如果处理不当,就会影响到与客户的沟通.企业的客户数据分析等重要问题上.如何做好企业内部CRM管理呢?今天亿客CRM就企业内部CRM管理给大家支几招. 一.建立问题汇集制度任何事情不可能一开始就是完美的,实施CRM也一样.在实施过程中,企业的每一员都是CRM的使用的用户,特别是销售人员和客服人员是使用频率最多的员工,他们可能会碰到很多

Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色

1 #models.py 2 3 # --------01PerfectCRM基本配置ADMIN-------- 4 5 from django.db import models 6 # Create your models here. 7 8 """ 9 #运行 Terminal 10 # 生成 数据表 11 # python manage.py makemigrations 12 # 数据表 迁移 13 # python manage.py migrate 14 &quo

Shell编写字符菜单管理-8

第8章 Shell编写字符菜单管理 一.shell函数定义function menu(){ echo 'this is a func!!';} 二.shell函数使用menu 三.cat命令的heredoc使用方法cat << eof aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaeof 四.字符界面下字体的颜色控制echo -e "\033[30;47m tes

华胜天成CRM客户权限管理

一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的招徕.保留旧客户.提供客户服务及进一步提升企业和客户的关系,并运用市场营销工具,提供创新式的个人化的客户商谈和服务,辅以相应的信息系统或信息技术如数据挖掘和数据库营销来协调所有公司与顾客间在销售.营销以及服务上的交互. 此系统主要是以教育行业为背景,为公司开发的一套客户关系管理系统.

CRM客户关系管理软件排名分享 !

客户是企业生存的基础,如果没有客户,企业就失去利润来源,也就无法生存下去.因此,选择一款好的CRM客户关系管理软件,维护好用户资源,对企业至关重要.但市场上产品很多,企业选型时难免存在诸多困惑:有哪些好用的CRM客户关系管理软件?谁能推荐几款好用的CRM?CRM软件如何选型?CRM软件大概多少钱?哪款CRM最适合自己?--为了解决这些问题,特整理出最新的CRM客户关系管理软件排名,希望能解决大家心中的困惑.     1.SAP CRM SAP客户关系管理(CRM) 软件,帮助企业通过所有渠道全面