code: def on_remove_row(self, event, row_num=-1):
          
          if row_num == -1:
              default = (255, 255, 255, 255)
              # unhighlight any selected rows:
              for row in self.selected_rows:
                  attr = wx.grid.GridCellAttr()
                  attr.SetBackgroundColour(default)
                  self.grid.SetRowAttr(row, attr)
              row_num = self.grid.GetNumberRows() - 1
              self.deleteRowButton.Disable()
              self.selected_rows = {row_num}
  
          function_mapping = {'specimen': self.er_magic.delete_specimen,
                              'sample': self.er_magic.delete_sample,
                              'site': self.er_magic.delete_site,
                              'location': self.er_magic.delete_location,
                              'result': self.er_magic.delete_result}
  
          names = [self.grid.GetCellValue(row, 0) for row in self.selected_rows]
          orphans = []
          for name in names:
              if name:
                  try:
                      row = self.grid.row_labels.index(name)
                      function_mapping[self.grid_type](name)
                      orphans.extend([name])
                  # if user entered a name, then deletes the row before saving,
                  # there will be a ValueError
                  except ValueError:
                      pass
              self.grid.remove_row(row)
          self.selected_rows = set()
          self.deleteRowButton.Disable()
          self.grid.Refresh()
          self.main_sizer.Fit(self)
docs: Remove specified grid row.
          If no row number is given, remove the last row.