public void Save(int selectedRowIndex, string hardware) { var rowCounter = -1; var assignments = _assignedControlProcessor.GetAssignments(); // На случай, если меняется только инверсия, можно принимать и пустой hardware if (selectedRowIndex == -1 || (string.IsNullOrEmpty(hardware) && assignments.Length == 0)) { return; } foreach (var row in _dataTable.Rows) { rowCounter++; if (rowCounter != selectedRowIndex) { continue; } foreach (IAssignment a in assignments) { if (a.GetConnector().Id == int.Parse((string)((DataRow)row).ItemArray[0])) { a.SetAssignedHardware(string.IsNullOrEmpty(hardware) ? a.GetAssignedHardware() : hardware); if (_assignedControlProcessor.HasInvertMode()) { a.SetInverseState((bool)((DataRow)row).ItemArray[3]); } _assignedControlProcessor.SetAssignment(a); break; } } } HardwareManager.ResendLastControlEvent(hardware); }