【问题标题】:Devexpress GridControl : Prevent new row added automaticallyDevexpress GridControl:防止自动添加新行
【发布时间】:2014-06-30 01:46:42
【问题描述】:

请指导我如何防止在 DevExpress.XtraGrid.GridControl 上自动添加新行

我想控制何时添加新行,在我的情况下,我为此任务使用了 keydown 事件 (CTRL + I)。但是如果我将焦点(光标指针)移动到最后一行下方的区域并单击,网格会自动添加新行。

GridControl.MainView 是一个BandedGridView,它包含数据源。

【问题讨论】:

    标签: insert grid devexpress row


    【解决方案1】:

    您可以使用BandedGridView.OptionsView.NewItemRowPosition 属性。您可以将其值设置为 NewItemRowPosition.None 以隐藏新项目行。

    另一种方法是处理BandedGridView.ShownEditor 事件。在这里面你可以检查BandedGridView.FocusedRowHandle属性是否等于GridControl.NewItemRowHandle并取消编辑器激活。
    这是示例:

    private void bandedGridView1_ShowingEditor(object sender, CancelEventArgs e)
    {
        if (bandedGridView1.FocusedRowHandle == GridControl.NewItemRowHandle)
        {
            // Do here additional checks if you need. After your checks set e.Cancel to true.
            e.Cancel = true;
        }
    }
    

    【讨论】:

    • 谢谢,但我认为这不能满足我的需要。第一个解决方案将阻止行追加,因为我只想阻止自动追加行。第二个解决方案仍然显示附加的行,唯一的区别是我们不能编辑它。您有其他解决方案吗?谢谢!
    • @hoangnnm 基本上,第一个解决方案并没有阻止追加行。它只是隐藏新项目行,但您仍然可以在代码中添加新行。你在你的 keydown 事件(CTRL + I)中使用了什么代码?第二种解决方案禁用新行的编辑。如果禁用编辑,则无法添加该行。
    【解决方案2】:

    您可以处理 ValidateRow 事件。如果您设置e.Valid = false,您将不会添加新行。因此,请检查您的对象是否为空或无效,以及是否键入了所需的值,您才可以释放该行。

    private void grvMyView_ValidateRow(object sender, ValidateRowEventArgs e)
    {
                if (grvMyView.IsNewItemRow(e.RowHandle))
                {
                   MyObject obj = grvMyView.GetRow(e.RowHandle) as MyObject;
    
                   e.Valid = obj.IsValid();
                }
    }
    

    【讨论】:

      【解决方案3】:

      从版本 15 开始,您可以简单地将 TableView 的 NewItemRowPosition 设置为 NewItemRowPosition.None。请务必先在 TableView 上调用 CommitEditing()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多