DevExpress.XtraGrid.GridControl 實現自定義tooltip


DevExpress.XtraGrid.GridControl 控件默認的tooltip顯示的每一個單元格的文本值,但是實際工作中會出現各種需求。我這里就有一個列是折扣率顯示的值是0-1之間的兩位小數,比如說0.55想要顯示成五五折。那就需要自己來做一下處理了(效果看下圖)

首先。在工具欄中找到ToolTipControllerk控件,並且設置GridControl.ToolTipController=MainGvTool

 

            

 

然后再添加的ToolTipControllerk控件的GetActiveObjectInfo事件中:

 

 

private void MainGvTool_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e)
{
     GridHitInfo hitInfo = gvDiscountSchme.CalcHitInfo(e.ControlMousePosition);

     if (hitInfo.RowHandle < 0 || hitInfo.Column == null||hitInfo.HitTest != GridHitTest.RowCell)
     {
         MainGvTool.HideHint();
          return;
     }

     DataRow row = gvDiscountSchme.GetDataRow(hitInfo.RowHandle);
    //如果是DiscountRate列 就顯示自定義的tooltip if (hitInfo.Column.FieldName == "DiscountRate") { int rate = (int)(Convert.ToDouble(row["DiscountRate"].ToString()) * 100); e.Info = new ToolTipControlInfo("我也不知道這個參數干嘛用的", GetChineseRate(rate)); } }

private ToolTipControllerShowEventArgs CreateShowArgs(string tooltipText)
{
    ToolTipControllerShowEventArgs args = MainGvTool.CreateShowArgs();
    args.ToolTip = tooltipText;
    return args;
}

 e.Info = new ToolTipControlInfo("我也不知道這個參數干嘛用的", GetChineseRate(rate));的第二個參數就是想要顯示的文本,如果把GetChineseRate(rate)換成"aaaa" 那么鼠標移動到Grid上面的 DiscountRate列的時候,tooltip就顯示的是"aaaa".

這個功能到這里本來算是完成了,但是我這里是想要把0.55顯示成五五折,所以還需要做個處理,這里一並說一下我的實現方式

        Dictionary<int, string> ChineseRateDic = new Dictionary<int, string>();
        public FrmDiscountSchemeList()
        {
            InitializeComponent();
            ChineseRateDic = GetRateDis();
        }

        /// <summary>
        /// 根據數字獲取漢字
        /// </summary>
        /// <param name="intRate"></param>
        /// <returns></returns>
        string GetChineseRate(int intRate)
        {
            string chineseRate = string.Empty;

            chineseRate=ChineseRateDic.Where(item => item.Key == intRate).First().Value;
            return chineseRate;
        }

        /// <summary>
        /// 獲取1-100數字轉換漢字的字典集合
        /// </summary>
        /// <param name="intRate"></param>
        /// <returns></returns>
        Dictionary<int, string> GetRateDis()
        {
            Dictionary<int, string> dic = new Dictionary<int, string>();

            for (int i = 1; i <= 100; i++)
            {
                if (i < 10)
                {
                    dic.Add(i, string.Format("零{0}折", Enum.GetName(typeof(NumToChinese), i)));
                }
                else if (i >= 10 && i < 100)
                {
                    string tmp = string.Empty;
                    foreach (char c in  i.ToString())
                    {
                        if (c.ToString() == "0") break;
                        tmp += Enum.GetName(typeof(NumToChinese), Convert.ToInt32(c.ToString()));
                    }
                    dic.Add(i, string.Format("{0}折", tmp));
                }
                else
                {
                    dic.Add(i,"不打折");
                }
            }
            return dic;
        }

        /// <summary>
        /// 漢字、數字對比枚舉
        /// </summary>
        enum NumToChinese
        {
            零 = 0,
            一 = 1,
            二 = 2,
            三 = 3,
            四 = 4,
            五 = 5,
            六 = 6,
            七 = 7,
            八 = 8,
            九 = 9
        }                

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM