Как получить RowHandle (когда он станет действительным) нового ряда сетки (devexpress) - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть сетка, когда пользователь добавляет новую строку и редактирует ее, я хочу всплывающее сообщение опции Сохранить / Отменить текущую настройку, когда он пытается переместить фокус на другую строку.

Проблема вЯ не могу получить дескриптор новой строки, так что я мог бы сделать, если prevFocusHanlde == newRowHandle && editModeOn

У меня есть только -214 ... как дескриптор новой строки, который по умолчанию, но после проверки строки, сеткисоздает новый действительный дескриптор строки для этой новой строки. Где это записать? Пробовал делать в RowUpdated, но он не вызывается и к тому времени дескриптор не обновляется.

Ответы [ 3 ]

3 голосов
/ 22 ноября 2011

Когда конечный пользователь начинает редактировать новую строку / карточку элемента, возникает событие ColumnView.InitNewRow .Вы можете обработать это событие для инициализации определенных полей в новой записи.После того как фокус переместился на другую строку, вновь добавленная строка добавляется в источник данных и отображается пустая строка нового элемента.Событие ValidateRow возникает, когда измененная строка теряет фокус.Обработайте это событие, чтобы указать, являются ли данные строки действительными и разрешено ли перемещение фокуса (вы можете использовать метод ColumnView.IsNewItemRow , чтобы определить, является ли указанная строка строкой нового элемента).Сразу после добавления строки ее дескриптор равен BaseView.DataRowCount - 1 .

Связанные темы:

1 голос
/ 22 ноября 2011

Что бы я не понял из вопроса, вы хотите сделать что-то вроде ниже:

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)
    }            
}
0 голосов
/ 07 июня 2014

вы можете использовать следующую функцию.

    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);
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...