You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跳过“添加状态”直接进入“编辑状态”及DevExpress GridControl新增行问题咨询

解决方案:跳过DevExpress GridControl新增行的临时状态,直接进入编辑模式

我之前也碰到过一模一样的问题,DevExpress GridControl默认的新增行临时状态(那种按Esc会删行、无法选中的模式)确实很影响操作体验,下面是几个亲测有效的解决思路:

1. 强制新增行直接进入编辑状态,取消临时模式

处理GridView.InitNewRow事件,在新增行创建完成后,立刻将其切换到正常编辑状态,同时让行可以被选中:

private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
{
    GridView view = sender as GridView;
    // 确保焦点锁定在新增行上
    view.FocusedRowHandle = e.RowHandle;
    // 直接打开编辑器进入编辑状态
    view.ShowEditor();
    // 关闭新增行的临时"自动删除"行为
    view.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.True;
    // 开启多选并选中当前新增行(如果需要多选功能)
    view.OptionsSelection.MultiSelect = true;
    view.SelectRow(e.RowHandle);
}

另外可以提前修改GridView的全局选项,让新增行一开始就加入正式行集合:

  • 打开GridView设计器,找到OptionsBehavior,设置ImmediateUpdateRowPosition为True,这样新增行不会停留在临时位置,直接成为可选中的正常行。

2. 自定义导航器的新增按钮行为

如果嵌入式导航器的默认新增逻辑不符合需求,可以重写按钮点击事件,手动控制新增流程:

private void gridControl1_EmbeddedNavigator_ButtonClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
{
    if (e.Button.ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Append)
    {
        // 取消导航器的默认新增行为
        e.Handled = true;
        GridView view = gridControl1.MainView as GridView;
        // 手动添加新行并获取行句柄
        int newRowHandle = view.AddNewRow();
        // 聚焦新行并进入编辑状态
        view.FocusedRowHandle = newRowHandle;
        view.ShowEditor();
        // 选中该行(适配多选场景)
        view.SelectRow(newRowHandle);
    }
}

3. 拦截Esc键,避免误删新增行

如果还是存在按Esc删除整行的问题,可以重写GridView的KeyDown事件,自定义Esc键的行为:

private void gridView1_KeyDown(object sender, KeyEventArgs e)
{
    GridView view = sender as GridView;
    // 如果当前是新增行,按下Esc仅关闭编辑器,不删除行
    if (e.KeyCode == Keys.Escape && view.IsNewItemRow(view.FocusedRowHandle))
    {
        view.CloseEditor();
        e.Handled = true;
    }
}

4. 修改新增行的左侧指示器图标

要把默认的光标图标改成编辑表单图标,可以处理CustomDrawRowIndicator事件自定义绘制:

private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
    GridView view = sender as GridView;
    if (e.RowHandle == view.FocusedRowHandle && view.IsNewItemRow(e.RowHandle))
    {
        // 替换为DevExpress内置的编辑图标
        e.Info.Image = DevExpress.Images.ImageResourceCache.Default.GetImage("images/actions/edit_16x16.png");
        e.Info.ImageAlignment = StringAlignment.Center;
        e.Handled = true;
    }
}

把这些方法组合起来,就能完美解决你遇到的所有问题:新增行直接进入编辑状态、Esc不会删除整行、支持包含新增行的多选操作,同时指示器图标也能改成你需要的样式。

内容的提问来源于stack exchange,提问作者user9730459

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:23:50