Какое событие Windows Form DataGridView должно обрабатываться? - PullRequest
0 голосов
/ 26 января 2019

Я добавляю модальный редактор к существующему приложению C # для Windows Forms, которое контролирует инвентарь.В настоящее время форма отображает то, что выглядит как один DataGridView, но на самом деле это 4 DataGridView.Не все столбцы видны одновременно, что является причиной для добавления модального редактора.Горизонтальной прокрутки много.

Модальный редактор должен запускаться, когда пользователь щелкает ячейку в любом из 4-х DataGridView (в любом месте строки отображаемых данных).Проблема в том, что при открытии модального редактора редактируется неправильная строка.Модальный редактор отображает ранее выбранную строку, а не текущую строку.Текущее используемое событие - SelectionChanged .Я также пытался использовать CellEnter и RowEnter .

. Редактирование было отключено в 4 DataGridView.

События, которые были удалены изКаждый DataGridView: CellBeginEdit , CellEndEdit, RowEnter, CellEnter.Я знаю, что в MSDN есть документация, в которой перечислены все события DataGridView.

Проблема, по-видимому, заключается в последовательности событий DataGridView, какие из них обрабатываются в коде, а какие необходимо обрабатывать в коде.,

Есть ли какие-либо документы о последовательности событий?

    private void GenericDataGrid_SelectionChanged(object sender, EventArgs e)
    {
        DataGridView currentGrid = (DataGridView)sender;
        int localCurrentRow = currentGrid.CurrentCell.RowIndex;

        if (!_modalEditorOpen && !_formLoading)
        {
            ModalEditorForm_Start(localCurrentRow);
        }
    }

    private void ModalEditorForm_Start(int currentRow)
    {
        RemoveSelectionChangedHandlers();   // Will be added back when the Modal Editor closes.

        ModalEditor modalEditor = new ModalEditor(EquipmentCategoryID, ManufacturerID, this);

        InitAssetItems(assetItemsList, currentRow);
        InitReceivingItems(receivingControlValuesList, currentRow);
        InitAuditItems(auditControlValuesList, currentRow);

        modalEditor.FormClosed += new FormClosedEventHandler(ModalEditorForm_Closed);
        modalEditor.SerialNumber = dgSerialNumber.Rows[currentRow].Cells[0].Value.ToString();

        modalEditor.AssetControlsValues = assetItemsList;
        modalEditor.ReceivingControlsValues = receivingControlValuesList;
        modalEditor.AuditControlsValues = auditControlValuesList;
        modalEditor.SessionID = SessionID;
        modalEditor.SessionSequence = SessionSequence;

        modalEditor.Show();
        _formLoading = false;
    }

    private void ModalEditorForm_Closed(object sender, FormClosedEventArgs e)
    {
        ModalEditor modalEditor = (ModalEditor)sender;
        if (modalEditor.SaveClicked)
        {
            int currentRow = modalEditor.RowID - 1;
            UpdateDataGridRowWithModalEditorValues(dgAssetDetails, currentRow, modalEditor.AssetControlsValues);
            updateAuditDetailsDataGridRow(currentRow, modalEditor.AuditControlsValues);
            UpdateAuditTextFields(modalEditor);

            save(true);
        }
        AddSelectionChangedHandlers();
    }

    private void AddSelectionChangedHandlers()
    {
        dgSerialNumber.SelectionChanged += new EventHandler(GenericDataGrid_SelectionChanged);
        dgReceivingData.SelectionChanged += new EventHandler(GenericDataGrid_SelectionChanged);
        dgAssetDetails.SelectionChanged += new EventHandler(GenericDataGrid_SelectionChanged);
        dgAuditDetails.SelectionChanged += new EventHandler(GenericDataGrid_SelectionChanged);
    }

    private void RemoveSelectionChangedHandlers()
    {
        dgSerialNumber.SelectionChanged -= new EventHandler(GenericDataGrid_SelectionChanged);
        dgReceivingData.SelectionChanged -= new EventHandler(GenericDataGrid_SelectionChanged);
        dgAssetDetails.SelectionChanged -= new EventHandler(GenericDataGrid_SelectionChanged);
        dgAuditDetails.SelectionChanged -= new EventHandler(GenericDataGrid_SelectionChanged);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...