

如图要求,在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这个方法是我处理数据分行用的。
文章评论