效果图

应用场景:自动化测试场景下,防止用户点击行区域切换当前行,确保测试项的聚焦状态可清晰识别,避免无法定位当前测试项。
//注册事件
this.gridView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gridView1_MouseDown);
this.gridView1.CustomDrawCell += new DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventHandler(this.gridView1_CustomDrawCell);
private void gridView1_MouseDown(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
// 1. 计算点击位置的HitInfo(判断点击的是哪个区域)
var hitInfo = view.CalcHitInfo(e.Location);
// 2. 判断是否点击了「复选框列」(关键:CheckMarkSelector列是DevExpress自动生成的复选框列)
//DX$CheckboxSelectorColumn为FileName,可以打断点 查看hitInfo.Column.FieldName 是什么名称
bool isClickCheckBoxColumn = hitInfo.Column != null && hitInfo.Column.FieldName == "DX$CheckboxSelectorColumn";
// 如果点击的是行区域(非复选框)
if (hitInfo.InRow)
{
if (isClickCheckBoxColumn)
{
// 手动切换当前行的选中状态,保留其他行的选择
if (view.IsRowSelected(hitInfo.RowHandle))
{
view.UnselectRow(hitInfo.RowHandle); // 已选中则取消
}
else
{
view.SelectRow(hitInfo.RowHandle); // 未选中则添加
}
}
// 阻止默认的“清空选择”行为
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
//更改当前行的颜色
private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
if (e.RowHandle >= 0)
{
if (e.RowHandle == this.gridView1.FocusedRowHandle)
{
e.Appearance.BackColor = ColorTranslator.FromHtml("#00BFFF");
e.Appearance.ForeColor = Color.White;
}
}
}
/// <summary>
/// 切换列表焦点
/// </summary>
/// <param name="RowHandle"></param>
private void SwitchSolution2(int RowHandle)
{
gridView1.FocusedRowHandle = RowHandle;
}本文来自 www.luofenming.com