如何获得RowHandle(当它变得有效时)的新行网格(devexpress)

本文关键字:devexpress 新行 有效 网格 RowHandle 何获得 | 更新日期: 2023-09-27 18:15:18

我有一个网格,当用户添加新行并正在编辑它时,我想在他试图将焦点转移到另一行时弹出保存/丢弃当前更改选项消息。

问题是我无法获得新行的处理,所以我可以这样做,如果prevfocushandde == newRowHandle &&editModeOn

我只有-214…作为默认的newrow句柄,但是在行验证之后,grid为这个新行生成一个新的有效行句柄。在哪里记录尝试在RowUpdated,但它没有被调用,到那时句柄还没有更新。

如何获得RowHandle(当它变得有效时)的新行网格(devexpress)

当最终用户开始编辑新的项目行/卡时,ColumnView。引发InitNewRow事件。您可以处理此事件来初始化新记录中的特定字段。一旦焦点转移到另一行,新添加的行将被添加到数据源中,并显示一个空白的新项行。当修改的行即将失去焦点时,将引发ValidateRow事件。处理此事件以指定行数据是否有效,以及是否允许焦点移动(您可以使用ColumnView。IsNewItemRow方法来确定指定的行是否是新项行)。在添加行之后,它的句柄等于BaseView。DataRowCount - 1.

相关主题:

  • 新项目行概述
  • 标识行和卡
  • 添加和删除记录
  • 验证行

无论我从问题中理解到什么,你都要做下面的事情:

List<int> rowIndex = new List<int>();
private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
{
    if (!rowIndex.Contains(e.RowIndex))
    {
          rowIndex.Add(e.RowIndex);
          MessageBox.Show("Are you want to save changes?", "Save Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    }            
}

可以使用下面的函数。

    public static bool IsCorrectRowHandle(GridView view, int rowHandle)
    {
        bool result = false;
        try
        {
            System.Data.DataRow row = view.GetDataRow(rowHandle);
            if (row != null)
                result = true;
        }
        catch
        {
            return result;
        }
        return result;
    }

使用函数;

            if (bgwInvoiceDetails.RowCount > 0)
            {
                if (ADevExpress.DevExpressMethods.IsCorrectRowHandle(bgwInvoiceDetails, GridControl.NewItemRowHandle))
                {
                    bgwInvoiceDetails.SetRowCellValue(GridControl.NewItemRowHandle, colExchangeType, leExchangeCode.EditValue);
                    bgwInvoiceDetails.SetRowCellValue(GridControl.NewItemRowHandle, colExchangePrice, teExchangePrice.EditValue);
                }
                for (int i = 0; i < bgwInvoiceDetails.RowCount; i++)
                {
                    if (ADevExpress.DevExpressMethods.IsCorrectRowHandle(bgwInvoiceDetails, i))
                        bgwInvoiceDetails.SetRowCellValue(i, colExchangePrice, teExchangePrice.EditValue);
                }
            }