docs: def InitSiteCheck(self):
          """make an interactive grid in which users can edit site names
          as well as which location a site belongs to"""
          self.panel = wx.Panel(self, style=wx.SIMPLE_BORDER)
  
          text = """Step 3:
  Check that all sites are correctly named, and that they belong to the correct location.
  Fill in the additional columns with controlled vocabularies.
  The columns for class, lithology, and type can take multiple values in the form of a colon-delimited list.
  You may use the drop-down menus to add as many values as needed in these columns.
  (see the help button for more details)
  note: Changes to site_class, site_lithology, or site_type will overwrite er_samples.txt
  However, you will be able to edit sample_class, sample_lithology, and sample_type in step 4
  
  **Denotes controlled vocabulary"""
          label = wx.StaticText(self.panel, label=text)
          #self.Data_hierarchy = self.ErMagic.Data_hierarchy
          self.sites = sorted(self.er_magic_data.make_name_list(self.er_magic_data.sites))
  
          #for val in ['er_citation_names', 'er_location_name', 'er_site_name', 'site_class', 'site_lithology', 'site_type', 'site_definition', 'site_lat', 'site_lon']: #
          #    try:
          #        self.er_magic_data.headers['site']['er'][0].remove(val)
          #    except ValueError:
          #        pass
  
          self.grid_builder = grid_frame2.GridBuilder(self.er_magic_data, 'site',
                                 self.er_magic_data.headers, self.panel,
                                 'location')
  
          self.site_grid = self.grid_builder.make_grid(incl_pmag=False)
          self.site_grid.InitUI()
          self.grid_builder.add_data_to_grid(self.site_grid, 'site', incl_pmag=False)
          self.grid = self.site_grid
  
          # populate site_definition as 's' by default if no value is provided (indicates that site is single, not composite)
          rows = self.site_grid.GetNumberRows()
          col = 6
          for row in range(rows):
              cell = self.site_grid.GetCellValue(row, col)
              if not cell:
                  self.site_grid.SetCellValue(row, col, 's')
  
          # initialize all needed drop-down menus
          locations = sorted(self.er_magic_data.make_name_list(self.er_magic_data.locations))
          self.drop_down_menu = drop_down_menus.Menus("site", self, self.site_grid, locations)
  
          ### Create Buttons ###
          hbox_one = wx.BoxSizer(wx.HORIZONTAL)
          self.addLocButton = wx.Button(self.panel, label="Add a new location")
  
          self.Bind(wx.EVT_BUTTON, self.on_addLocButton, self.addLocButton)
          hbox_one.Add(self.addLocButton, flag=wx.RIGHT, border=10)
  
          self.helpButton = wx.Button(self.panel, label="Help")
          self.Bind(wx.EVT_BUTTON, lambda event: self.on_helpButton(event, "ErMagicSiteHelp.html"), self.helpButton)
          hbox_one.Add(self.helpButton)
  
          hboxok = wx.BoxSizer(wx.HORIZONTAL)
          self.saveButton = wx.Button(self.panel, id=-1, label='Save')
          self.Bind(wx.EVT_BUTTON, lambda event: self.on_saveButton(event, self.site_grid), self.saveButton)
          self.cancelButton = wx.Button(self.panel, wx.ID_CANCEL, '&Cancel')
          self.Bind(wx.EVT_BUTTON, self.on_cancelButton, self.cancelButton)
          self.continueButton = wx.Button(self.panel, id=-1, label='Save and continue')
          self.Bind(wx.EVT_BUTTON, lambda event: self.on_continueButton(event, self.site_grid, next_dia=self.InitSampCheck), self.continueButton)
          self.backButton = wx.Button(self.panel, wx.ID_ANY, "&Back")
          previous_dia = self.InitSampCheck
          self.Bind(wx.EVT_BUTTON, lambda event: self.on_backButton(event, previous_dia=previous_dia), self.backButton)
  
          hboxok.Add(self.saveButton, flag=wx.RIGHT, border=10)
          hboxok.Add(self.cancelButton, flag=wx.RIGHT, border=10)
          hboxok.Add(self.continueButton, flag=wx.RIGHT, border=10)
          hboxok.Add(self.backButton)
  
          #
          hboxgrid = pw.hbox_grid(self.panel, self.onDeleteRow, 'site', self.grid)
          self.deleteRowButton = hboxgrid.deleteRowButton
  
          self.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK, self.onLeftClickLabel, self.grid)
  
  
          ### Make Containers ###
          vbox = wx.BoxSizer(wx.VERTICAL)
          vbox.Add(label, flag=wx.ALIGN_CENTER|wx.BOTTOM|wx.TOP, border=20)
          vbox.Add(hbox_one, flag=wx.BOTTOM|wx.LEFT, border=10)
          vbox.Add(hboxok, flag=wx.BOTTOM|wx.LEFT, border=10)
          vbox.Add(hboxgrid, flag=wx.BOTTOM|wx.LEFT, border=10)
          vbox.Add(self.site_grid, flag=wx.ALL|wx.EXPAND, border=10) # EXPAND ??
          vbox.AddSpacer(20)
  
          self.hbox_all = wx.BoxSizer(wx.HORIZONTAL)
          self.hbox_all.AddSpacer(20)
          self.hbox_all.Add(vbox)
          self.hbox_all.AddSpacer(20)
  
          self.panel.SetSizer(self.hbox_all)
          #if sys.platform in ['win32', 'win64']:
          #    self.panel.SetScrollbars(20, 20, 50, 50)
          self.hbox_all.Fit(self)
          self.Centre()
          self.Show()
          # this combination prevents a display error that (without the fix) only resolves on manually resizing the window
          self.site_grid.ForceRefresh()
          self.panel.Refresh()
          self.Hide()
          self.Show()