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

来源:https://www.cnblogs.com/wuhuacong/archive/2019/02/28/10450875.html
-Advertisement-
Play Games

在一些場合裡面,我們需要對一些記錄進行顏色標註處理,以標記記錄的信息重要性或者進行類別區分,如在客戶關係管理系統裡面,我們需要對客戶信息進行不同顏色的標註,方便對不同類別的管理,畢竟顏色區分還是比較直觀快速的一種。本隨筆介紹在我們的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);
            }

這樣我們就可以根據樹節點的條件來進行過濾數據了。

我們再來回顧下列表界面的整體情況。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 不論是面試還是正常工作需要都會用到遍歷文件夾下的所有文件,今天就記錄一下筆記。廢話不多說直接上代碼: 運行結果: 源代碼已上傳GitHub:https://github.com/cuiyuanxin/php-demo/blob/master/dir.php 純手打筆記,如有錯誤請評論提出,謝謝。 ...
  • 第二階段:提高階段 (中級PHP程式員)重點:提高針對LNMP的技能,能夠更全面的對LNMP有熟練的應用。目標:能夠隨時隨地搭建好LNMP環境,快速完成常規配置;能夠追查解決大部分遇到的開發和線上環境的問題;能夠獨立承擔中型系統的構架和開發工作;能夠在大型系統中承擔某個中型模塊的開發工作;1. Li ...
  • 事務的概念 一組要麼同時執行成功,要麼同時執行失敗的SQL語句,是資料庫操作的一個執行單元! 事務開始於: 連接到資料庫上,並執行一條DML語句(insert,update或delete),前一個事務結束後,又輸入了一條DML語句。 事務結束於: 1)執行commit或rollback語句。 2)執 ...
  • 在ASP.NET網站項目實際上線運行的過程中,有時候在運行環境下會出現400錯誤或者500錯誤,這些錯誤預設的頁面都不友好,比較簡單單調,其實我們可以自行設置這些錯誤所對應的頁面,讓這些錯誤跳轉到我們指定的路徑。此文將介紹如何在ASP.NET項目中設置404錯誤和500錯誤為例。 首先我們可以到網上 ...
  • 今天,我們將分享 Visual Studio 2019 的發佈候選版(RC 版) - 這是在 4 月 2 日的[虛擬發佈活動](https://launch.visualstudio.com/)上正式發佈之前的最後步驟之一。 您可以在 visualstudio.com/downloads 下載 RC... ...
  • 一、程式運行時產生的錯誤通過使用一種稱為異常(Exception)的機制在程式中傳遞,通過異常處理(Exception Handling)有助於處理程式運行過程中發生的意外或異常情況;異常可由CLR和客戶端代碼拋出(Throw),拋出的異常會在調用堆棧中傳遞,直到遇到可以捕獲該異常的語句進行處理並中 ...
  • 1 使用 WebShellKillerTool 進行網站文件掃描 能抓出一般後臺漏洞文件 2 控制面板-->文件夾選項-->顯示隱藏文件-->上面兩個如果是勾選狀態要去除 否則 有的文件會偽裝未受保護的系統文件 而不能被查看 3 檢查global 文件是否被篡改 4 檢查網站JS是否被註入特殊文件 ...
  • 1.前言 本篇文章通過ASP.NET Core的EPPlus包去操作Excel(導入導出),其使用原理與NPOI類似,導出Excel的時候不需要電腦上安裝office,非常好用 2.使用 新建一個ASP.NET Core Web應用程式(模型視圖控制器),還有一個類庫,SDK2.1版本,解決方案如下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...