如图要求,在gridcontrol控件上数据正常显示,用,隔开每个数据,但是鼠标移动上去要求竖着一列的显示。
实现:
由于原数据和自带tootip效果显示一致,只能重写一个tootip鼠标移动上去的效果。
在界面上拉上一个控件如图1
后台捕获鼠标在gridcontrol上的位置,确定行数,在确定位置处显示想要的结果。
后台代码如下:
int _RowHandle; private void gridViewTrade_MouseMove(object sender, MouseEventArgs e) { try { // 获取鼠标焦点 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = gridViewTrade.CalcHitInfo(new Point(e.X, e.Y)); // 如果鼠标不是在行上.或者不在列上 if (hi.RowHandle < 0 || hi.Column == null) { _RowHandle = -1; return; } // rowHandle为全局变量,如果上次指向的是这一行的数据.则这次不重新初始化ToolTip.(因为鼠标一移到列上面则会触发多次的MouseMove) // 如果RowHandle为不等于rowHandle则重新显示ToolTip // 只有在订单编号列的时候才显示ToolTip if (hi.Column.FieldName == "Contract_Codes") { // 创建ToolTip的数据显示,只有订单有备注的时候才显示ToolTip string tooltipText = gridViewTrade.GetRowCellValue(hi.RowHandle, gc_TradeType).ToString(); if (!string.IsNullOrEmpty(tooltipText)) { // 获取显示ToolTip事件实例 ToolTipControllerShowEventArgs args = CreateShowArgs(StringHelper.JoinLineToString(tooltipText)); // 显示ToolTip 这里不可以用控件的坐标.要用屏幕的坐标Control.MousePosition toolTipController.ShowHint(args, System.Windows.Forms.Control.MousePosition); } } else if (hi.Column.FieldName == "Client_Ids") { string tooltipText = gridViewTrade.GetRowCellValue(hi.RowHandle, gc_TradeAccount).ToString(); if (!string.IsNullOrEmpty(tooltipText)) { // 获取显示ToolTip事件实例 ToolTipControllerShowEventArgs args = CreateShowArgs(StringHelper.JoinLineToString(tooltipText)); // 显示ToolTip 这里不可以用控件的坐标.要用屏幕的坐标Control.MousePosition toolTipController.ShowHint(args, System.Windows.Forms.Control.MousePosition); } } } catch (Exception ex) { } } /// <summary> /// 创建显示ToolTip事件实例 /// </summary> /// <param name="tooltipText"></param> /// <returns></returns> private ToolTipControllerShowEventArgs CreateShowArgs(string tooltipText) { ToolTipControllerShowEventArgs args = toolTipController.CreateShowArgs(); args.ToolTip = tooltipText; return args; }
StringHelper.JoinLineToString这个方法是我处理数据分行用的。
文章评论