Я добавляю модальный редактор к существующему приложению 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);
}