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

时间:2011-11-22 06:08:10

标签: c# winforms devexpress

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

问题是我无法处理新行,所以如果prevFocusHanlde == newRowHandle&& editModeOn

我只有-214 ...作为默认的新行句柄,但在行验证之后,网格为这个新行生成一个新的有效行句柄。 在哪里录制? 尝试在RowUpdated中进行,但它没有被调用,并且到那时处理还没有更新。

3 个答案:

答案 0 :(得分:3)

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

相关主题:

答案 1 :(得分: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)
    }            
}

答案 2 :(得分:-1)

您可以使用以下功能。

    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);
                }
            }