客戶關係管理系統中實現對客戶信息標記顏色的處理

 

在一些場合裏面,咱們須要對一些記錄進行顏色標註處理,以標記記錄的信息重要性或者進行類別區分,如在客戶關係管理系統裏面,咱們須要對客戶信息進行不一樣顏色的標註,方便對不一樣類別的管理,畢竟顏色區分仍是比較直觀快速的一種。本隨筆介紹在咱們的CRM客戶關係管理系統中,對客戶信息的標註處理和顯示區分的實現。數據庫

一、客戶信息的分類

在一個CRM客戶關係管理系統裏面,客戶信息的種類比較多,用來標記不一樣類別,同時也是方便咱們對不一樣類別信息進行的快速篩選查詢,以下是客戶關係管理系統裏面對於客戶信息的展現,左邊樹形列表裏面,列出不少客戶屬性的類別。函數

如客戶狀態、客戶類型、客戶級別、客戶行業等等不一樣的屬性分類,除了這些分類,咱們還能夠對客戶記錄進行顏色標註,這樣能夠更加直觀區分這個客戶屬於那種特定的類型,爲了方便,咱們預設幾種比較好區分的顏色進行處理便可,不須要設計太多的顏色,以便以7個爲標準就能夠了,太多也沒有意義。字體

在編輯客戶信息的時候,咱們能夠設置該記錄的顏色選項,以下面界面所示。this

設置了不一樣類別顏色的客戶信息後,咱們能夠在記錄的行裏面用不一樣的顏色進行區分顯示,這樣看起來就更加直觀了。編碼

下面咱們來看看具體的實現過程代碼。spa

 

二、顏色標註的實現過程

在編輯界面添加相關的標籤控件和一個下拉按鈕的控件,以下界面所示。設計

其中標註顏色的下拉按鈕是DevExpress的DropDownButton控件。3d

初始化建立下拉按鈕的代碼以下所示。code

        /// <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;
        }

其中咱們在重構的時候,移除了硬編碼的顏色記錄,改用一個輔助類來處理顏色字典,這樣能夠方便修改。orm

    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);
            }

這樣咱們就能夠根據樹節點的條件來進行過濾數據了。

咱們再來回顧下列表界面的總體狀況。

相關文章
相關標籤/搜索