限定DevExpress,gridControl ,GridView 行选中规则:仅复选框触发反选,聚焦行高亮样式设置,切换列表焦点

首次发布:2025-12-05

效果图

40c65855-05d3-4e3e-b26b-6105f51bbe2e.png

应用场景:自动化测试场景下,防止用户点击行区域切换当前行,确保测试项的聚焦状态可清晰识别,避免无法定位当前测试项。

//注册事件
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