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列 就显示自定义的tooltipif (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}