public static ProjectSpecie Parse(Match m, DataTable t, List<string> ErrorList)
 {
   ProjectSpecie ret = new ProjectSpecie(t, m.Groups["Symbol"].Value, ErrorList);
   try
   {
     if (m.Groups["ToleranceBelow"].Success)
       ret.ExtraBelowT = double.Parse(m.Groups["ToleranceBelow"].Value);
     if (m.Groups["ToleranceAbove"].Success)
       ret.ExtraAboveT = double.Parse(m.Groups["ToleranceAbove"].Value);
     if (m.Groups["Ideal"].Success)
       ret.Ideal = m.Groups["Ideal"].Value != "0";
   }
   catch
   {
   }
   return ret;
 }
    protected bool AddSpecies(DataRow[] values, int insertionIndex)
    {
      bool ret = false;
      lstProjectVector.BeginUpdate();
      List<ListViewItem> lvisToSelect = new List<ListViewItem>();
      foreach (DataRow r in values)
      {
        ListViewItem alreadyItem = AlreadyContained(r);
        if (alreadyItem == null)
        {
          ProjectSpecie specie = new ProjectSpecie(r);
          specie.Changed += new EventHandler(item_Changed);
          specie.TempFormatter = m_TempFormatter;
          specie.TempParser = m_TempParser;

          lvisToSelect.Add(specie.LVI);

          if (insertionIndex < 0)
            lstProjectVector.Items.Add(specie.LVI);
          else
            lstProjectVector.Items.Insert(insertionIndex++, specie.LVI);
          ret = true;
        }
        else
          lvisToSelect.Add(alreadyItem);
      }

      if (ret == true)
      {
        lstProjectVector.SelectedItems.Clear();
        foreach (ListViewItem lvi in lvisToSelect)
          lvi.Selected = true;
        CheckCalculations();
      }
      lstProjectVector.EndUpdate();
      if (ret && lstProjectVector.SelectedItems.Count > 0)
        lstProjectVector.SelectedItems[0].EnsureVisible();

      if (ret && this.UsedSpeciesChanged != null)
        UsedSpeciesChanged(this, new EventArgs());
      return ret;
    }