欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

客户关系管理系统中实现对客户信息标记颜色的处理

程序员文章站 2024-01-11 09:20:58
在一些场合里面,我们需要对一些记录进行颜色标注处理,以标记记录的信息重要性或者进行类别区分,如在客户关系管理系统里面,我们需要对客户信息进行不同颜色的标注,方便对不同类别的管理,毕竟颜色区分还是比较直观快速的一种。本随笔介绍在我们的CRM客户关系管理系统中,对客户信息的标注处理和显示区分的实现。 ......

 

在一些场合里面,我们需要对一些记录进行颜色标注处理,以标记记录的信息重要性或者进行类别区分,如在客户关系管理系统里面,我们需要对客户信息进行不同颜色的标注,方便对不同类别的管理,毕竟颜色区分还是比较直观快速的一种。本随笔介绍在我们的crm客户关系管理系统中,对客户信息的标注处理和显示区分的实现。

1、客户信息的分类

在一个crm客户关系管理系统里面,客户信息的种类比较多,用来标记不同类别,同时也是方便我们对不同类别信息进行的快速筛选查询,如下是客户关系管理系统里面对于客户信息的展示,左边树形列表里面,列出很多客户属性的类别。

客户关系管理系统中实现对客户信息标记颜色的处理

如客户状态、客户类型、客户级别、客户行业等等不同的属性分类,除了这些分类,我们还可以对客户记录进行颜色标注,这样可以更加直观区分这个客户属于那种特定的类型,为了方便,我们预设几种比较好区分的颜色进行处理即可,不需要设计太多的颜色,以便以7个为标准就可以了,太多也没有意义。

客户关系管理系统中实现对客户信息标记颜色的处理

在编辑客户信息的时候,我们可以设置该记录的颜色选项,如下面界面所示。

客户关系管理系统中实现对客户信息标记颜色的处理

设置了不同类别颜色的客户信息后,我们可以在记录的行里面用不同的颜色进行区分显示,这样看起来就更加直观了。

客户关系管理系统中实现对客户信息标记颜色的处理

下面我们来看看具体的实现过程代码。

 

2、颜色标注的实现过程

在编辑界面添加相关的标签控件和一个下拉按钮的控件,如下界面所示。

客户关系管理系统中实现对客户信息标记颜色的处理

其中标注颜色的下拉按钮是devexpress的dropdownbutton控件。

客户关系管理系统中实现对客户信息标记颜色的处理

初始化创建下拉按钮的代码如下所示。

        /// <summary>
        /// 创建标记颜色的下拉按钮
        /// </summary>
        /// <returns></returns>
        private dxpopupmenu createdxpopupmenu()
        {
            var menu = new dxpopupmenu();
            var dict = colorhelper.colordict;
            foreach(string key in dict.keys)
            {
                menu.items.add(createmenuitem(key, dict[key]));
            }
            //menu.items.add(createmenuitem("橙色", color.orange));
            //menu.items.add(createmenuitem("黄色", color.yellow));
            //menu.items.add(createmenuitem("绿色", color.green));
            //menu.items.add(createmenuitem("蓝色", color.blue));
            //menu.items.add(createmenuitem("紫色", color.purple));
            //menu.items.add(createmenuitem("黑色", color.black));
            return menu;
        }

其中我们在重构的时候,移除了硬编码的颜色记录,改用一个辅助类来处理颜色字典,这样可以方便修改。

    internal static class colorhelper
    {
        private static dictionary<string, color> colordict  = new dictionary<string, color>();

        static colorhelper()
        {
            colordict.add("红色", color.red);
            colordict.add("橙色", color.orange);
            //colordict.add("黄色", color.yellow);
            colordict.add("绿色", color.green);
            colordict.add("蓝色", color.blue);
            colordict.add("紫色", color.purple);
            colordict.add("黑色", color.black);
            colordict.add("无", color.empty);
        }

        /// <summary>
        /// 颜色字典
        /// </summary>
        public static dictionary<string, color>  colordict
        {
            get { return colordict; }
        }
    }

创建按钮并添加对应的单击事件代码

        private dxmenuitem createmenuitem(string text, color color)
        {
            var item = new dxmenuitem(text, onitemclick);
            item.appearance.backcolor = color;
            return item;
        }

        private void onitemclick(object sender, eventargs e)
        {
            dxmenuitem item = sender as dxmenuitem;
            if(item != null)
            {
                this.lblmarkcolor.backcolor = item.appearance.backcolor;
                //更新颜色
                string color = colortranslator.tohtml(this.lblmarkcolor.backcolor);
                if(!string.isnullorempty(id))
                {
                    bllfactory<customer>.instance.markcolor(id, color);
                }
            }
        }

其中我们注意到了,我们使用

colortranslator.tohtml

函数来转换对应的颜色代码到一个字符串来存储数据库里面,这个函数是系统内辅助类的函数。

客户关系管理系统中实现对客户信息标记颜色的处理

当我们需要展示字符串的颜色信息,需要把它转换为对应的颜色枚举,如下所示。

                    //标记颜色
                    if (!string.isnullorempty(info.markcolor))
                    {
                        this.lblmarkcolor.backcolor = colortranslator.fromhtml(info.markcolor);
                    }

在列表界面 里面,如果我们需要设置某个单元格颜色信息,那么我们通过添加这个实现就可以。

            this.wingridviewpager1.gridview1.rowcellstyle += new devexpress.xtragrid.views.grid.rowcellstyleeventhandler(gridview1_rowcellstyle);
       void gridview1_rowcellstyle(object sender, devexpress.xtragrid.views.grid.rowcellstyleeventargs e)
        {
            string columnname = e.column.fieldname;
            if (columnname == "name")
            {
                bool deleted = (bool)this.wingridviewpager1.gridview1.getrowcellvalue(e.rowhandle, "deleted");
                color color = color.white;
                if (deleted)
                {
                    e.appearance.backcolor = color.red;
                    e.appearance.backcolor2 = color.lightcyan;
                }

                //根据用户选择的标记颜色,设置单元格的颜色信息
                string markcolor = string.concat(this.wingridviewpager1.gridview1.getrowcellvalue(e.rowhandle, "markcolor"));
                if(!string.isnullorempty(markcolor))
                {
                    color = colortranslator.fromhtml(markcolor);
                    e.appearance.backcolor = color;
                    e.appearance.backcolor2 = color.white;
                }
            }
        }

在客户信息的左侧树形列表里面,我们初始化了一个标记颜色的树形列表,这里也是根据颜色信息进行一个条件的处理即可。

客户关系管理系统中实现对客户信息标记颜色的处理

初始化树形列的代码如下所示。

            //标记颜色的树形列表展示
            var colornode = new treenode("标记颜色", 0, 0);
            this.treeview1.nodes.add(colornode);
            var dict = colorhelper.colordict;
            foreach (string key in dict.keys)
            {
                treenode subnode = new treenode(key, 9, 9);
                var color = colortranslator.tohtml(dict[key]);
                string filter = "";
                if (string.isnullorempty(color))
                {
                    filter += "(markcolor ='' or markcolor is null) ";
                }
                else
                {
                    filter = string.format("{0}='{1}' ", "markcolor", color);
                }
                subnode.tag = filter;

                //增加数值
                //如果过滤条件不为空,那么需要进行过滤
                if (!string.isnullorempty(this.shareusercondition))
                {
                    filter = string.format(" {0} and {1}", this.shareusercondition, filter);
                }
                int count = bllfactory<customer>.instance.getrecordcount(filter);
                subnode.text += string.format("({0})", count);
                //避免透明不显示字体
                subnode.forecolor = dict[key];
                colornode.nodes.add(subnode);
            }

这样我们就可以根据树节点的条件来进行过滤数据了。

客户关系管理系统中实现对客户信息标记颜色的处理

我们再来回顾下列表界面的整体情况。

客户关系管理系统中实现对客户信息标记颜色的处理